Le code présenté ici est celui utilisé pour exploiter la base de donnée dite « Cassini », dans le cadre d’un travail mené par G. Bideau et N. Verdier autour de l’évolution du nombre de communes en France.
Il a donné lieu à un article dans la revue Cybergéo, publié en 2024 sous le titre « Une trame communale immuable ? La nécessaire géohistoire des communes françaises (1800-2024) » ainsi qu’à une application web : https://gbideau.shinyapps.io/nbr_communes_Fr_shiny/.
NB : Tous les éléments de code n’ont pas été vérifiés, une partie sont simplement des traces des tentatives et analyses exploratoires. D’une certaine manière, il s’agit presque d’un cahier de laboratoire, en annexe de l’article pré-cité. Les éléments qui nous ont paru les plus importantes sont à retrouver dans l’article. Nous mettons en ligne l’ensemble de ces informations dans une logique de science ouverte, reproductible, réutilisable mais aussi pour permettre une éventuelle vérification. Pour toute question, demande de compléments ou erreurs merci de contacter l’auteur de ce code.
Gabriel Bideau gabriel.bideau@gmail.com
Licence CC-BY-NC-SA.
# Librairies utilisées
library(sf)
library(cartography)
library(mapsf)
library(readxl)
library(ggplot2)
library(FactoMineR)
library(factoextra)
library(cluster)
library(reshape)
library(reshape2)
library(knitr)
library(rgeoda) # Pour les matrices de contiguïté
library(svgtools)
# Liste pour installer les packages si besoin :
# sf cartography mapsf readxl foreign dplyr flextable knitr stringr units condformat forcats ggplot2 rstatix questionr corrplot gtsummary broom GGally effects forestmodel ggeffects labelled cowplot spdep rgeoda svgtools
Les données utilisées sont une compilation de données principalement socio-économiques, localisées. La source principale est l’INSEE. Pour plus de détails, cf. l’article dans la revue Cybergéo : Gabriel Bideau et Ronan Ysebaert, « Data paper : Les communes nouvelles françaises (2012-2022) : une méthode pour l’analyse de données à l’échelon municipal selon des limites évolutives », Cybergeo: European Journal of Geography [En ligne], Data papers, document 1027, mis en ligne le 04 août 2022, consulté le 17 juillet 2024. URL : http://journals.openedition.org/cybergeo/39387 ; DOI : https://doi.org/10.4000/cybergeo.39387
Les géométries sont ici importées.
# Import si on veut partir des données de la base DAC
# geom2011 <- st_read("data/geom.gpkg", layer = "geom2011", quiet = TRUE)
# geom_new <- st_read("data/geom.gpkg", layer = "geom_new", quiet = TRUE)
# geomfus2011 <- st_read("data/geom.gpkg", layer = "geomfus2011", quiet = TRUE)
# geomCN_new <- st_read("data/geom.gpkg", layer = "geomCN_new", quiet = TRUE)
# dep <- st_read("data/geom.gpkg", layer = "dep", quiet = TRUE)
# Import à partir des données INSEE, permet de remettre la Corse
# Géométries des communes françaises au 1er janvier 2011 (source : IGN)
geom2011 <- st_read(dsn = "data-raw/geom/COMMUNE.SHP")
geom2011 <- st_transform(geom2011, crs = 3035) # Transformation Lambert-93
# Suppression et regroupement des arrondissements de Paris, Lyon et Marseille
arrcom <- read_excel("data-raw/geom/com_arm.xlsx") # Import de la table de passage des arrondissements
com <- merge(geom2011, arrcom, by = "INSEE_COM", all.y = TRUE) # Géométries des arrondissements
com <- aggregate(x = com[,"CODGEO"], by = list(com$CODGEO), # On les aggrège
FUN = head, 1)
com$NOM_COMM <- c("MARSEILLE", "LYON", "PARIS")
com$CODE_DEPT <- c("13","69","75")
geom2011 <- geom2011[!geom2011$INSEE_COM %in% arrcom$INSEE_COM, ] # Suppression des arrondissements
colnames(geom2011)[3] <- "CODGEO"
geom2011 <- rbind(geom2011[,c("CODGEO","NOM_COMM", "CODE_DEPT")],
com[,c("CODGEO","NOM_COMM", "CODE_DEPT")])
# Agrégation en départements
dep <- aggregate(x = geom2011[,"CODE_DEPT"], by = list(geom2011$CODE_DEPT), # Agrégation des communes en départements
FUN = head, 1)
# Création d'un data frame avec les CODGEO de référence
df <- st_set_geometry(geom2011[,c("CODGEO", "CODE_DEPT")], NULL)
# Forcer character
df$CODGEO <- as.character(df$CODGEO)
df$CODE_DEPT <- as.character(df$CODE_DEPT)
# Ajout nom département
departements <- read.csv("data-raw/stats_insee/departement_2022.csv", sep = ",", stringsAsFactors = FALSE, fileEncoding = "UTF8")
dep <- merge(dep, departements[, c("DEP", "LIBELLE")], all.x = TRUE, all.y = FALSE, by.x = "CODE_DEPT", by.y = "DEP")
rm(departements)
st_write(obj = dep, dsn = "data/geom.gpkg", layer = "dep_tte_France",
delete_layer = TRUE, quiet = TRUE)
st_write(obj = geom2011, dsn = "data/geom.gpkg", layer = "geom2011_tte_France",
delete_layer = TRUE, quiet = TRUE)
geom2011 <- st_read("data/geom.gpkg", layer = "geom2011_tte_France", quiet = TRUE)
dep <- st_read("data/geom.gpkg", layer = "dep_tte_France", quiet = TRUE)
# Pour faciliter la cortographie
# ShpDep <- as(dep, "Spatial")
ShpDep <- as_Spatial(dep) # Pose moins de problème
# Import des géométries des arrondissements
# Données transmises par Ludovic Chalonge (suite à une demande de Nicolas Verdier), le 30 août 2023.
# ## Ancienne version en utilisant le package rgdal
# The input file geodatabase
# fgdb <- "data-raw/arrdtv3.gdb"
# # List all feature classes in a file geodatabase
# subset(ogrDrivers(), grepl("GDB", name))
# fc_list <- ogrListLayers(fgdb)
# print(fc_list)
# date_choisie <- "1931"
# # Read the feature class
# arrondissements <- readOGR(dsn=fgdb,layer= paste0("aarrdt", date_choisie))
# projCodes <- make_EPSG() # Lister les différentes projections existant
# selecRgf <- projCodes[grep("RGF", projCodes$note), ] # Sélectionner certaines projections
# ShpDep2 <- spTransform(x = ShpDep, CRSobj = CRS("+init=epsg:2154")) # Transformer un objet dans la projection RGF
st_layers(dsn = "data-raw/arrdtv3.gdb")
date_choisie <- "1931"
arrondissements <- st_read("data-raw/arrdtv3.gdb", layer= paste0("aarrdt", date_choisie))
rm (date_choisie)
plot(arrondissements[1])
arrondissements <- st_transform(x = arrondissements, crs = st_crs(geom2011))
Les données socio-économiques qui décrivent les communes en
géographies 2011 et 2021 sont ici importées. On commence par extraire
les communes ayant participé à la création d’une commune nouvelle,
appelées ici communes fusionnantes (datafus2011), les
communes nouvelles, avec les géométries au 1er janvier 2021 et
caractérisées par les données à la géométrie 2011 agrégées
(dataCN_new), ainsi que les communes, à la géométrie 2011,
qui n’ont pas participé à la création d’une commune nouvelle
(dataNfus2011)
load("data/refdata.Rdata")
load("Archives/data_prep 2011-2023(01)/data/refdata.Rdata")
# datafus2011 <- subset(df2011, COM_NOUV == "OUI")
# dataCN_new <- subset(df_new, COM_NOUV == "OUI")
# dataNfus2011 <- subset(df2011, COM_NOUV == "NON")
Dans un certain nombre de cas, il sera utile d’avoir, dans un même objet, les données et les géométries. Les données sont ici jointes aux couches géographiques d’intérêt.
geom2011 <- merge(geom2011, df2011, by = "CODGEO")
# geom_new <- merge(geom_new, df_new, by = "CODGEO_new")
# geomCN_new <- merge(geomCN_new, dataCN_new, by = "CODGEO_new")
# geomfus2011 <- merge(geomfus2011, datafus2011, by = "CODGEO")
Un certain nombre d’espaces peuvent être étudiés à part : certaines communes nouvelles car elles ont été l’objet d’une enquête qualitative (Bideau (2017), Bideau (2019)), d’autres car elles sont sur des territoires très touchés par les fusions communales.
testEdC <- subset (geom2011, CODGEO_new == "61324" | CODGEO_new =="73150" | CODGEO_new == "73006")
testEdCSavoie <- subset (geom2011, CODGEO_new =="73150" | CODGEO_new == "73006")
testNormandie <- subset (geom2011, REG == "23" | REG == "25") # Haute et Basse Normandie
test49 <- subset (geom2011, CODE_DEPT == "49" ) # Département du Maine-et-Loire
testOuest <- subset (geom2011, REG == "23" | REG == "25"| REG == "53"| REG == "52") # Normandies, Bretagne, Pays-de-la-Loire
Le site Cassini a été créé par l’EHESS, permet de retrouver des évolutions très nombreuses concernant les communes françaises.
Une partie des fichiers de cette base est accessible sur la page suivante : https://didomena.ehess.fr/concern/data_sets/6395wb092?locale=fr
Concernant les codes utilisés dans les colonnes pop_xxxx_info (“xxxx” étant une date), voici les informations données par Bertrand Dumenieu à Nicolas Verdier, en sachant qu’il serait souhaitable de se le faire confirmer (par Claude Motte ?).
adm. : désigne une commune administrée. Lorsqu’une commune ne pouvait pas être auto-administée, par exemple car personne ne savait suffisamment bien écrire pour assurer les missions de maire, ou que la commune était trop minuscule, elle pouvait être rattachée à une voisine “tutelle” qui, alors, l’administrait. En général une commune administrée était rapidement fusionnée à celle qui les administrait ;
ill. : la ligne du recensement est illisible ;
lac. : la commune existe à la date du recensement mais elles est absente du document pour une raison inconnue ;
pop. : ce marqueur indique qu’il y a une valeur de population connue et reportée à cette date ;
si. : “sans information”. Cela couvre deux situations : soit la commune n’existe pas à cette date, soit on ne dispose d’aucune information permettant de dire qu’elle existe.
Donc, adm., ill., lac. et pop. concernent des communes qui existent. On considère qu’une commune marquée “si” n’existe pas à la date correspondante.
# download.file("https://didomena.ehess.fr/downloads/kd17cw827?locale=fr", "data-raw/temps_long/lieux_cassini_devenus_communes.csv")
# Téléchargement effectué le 6 mars 2023 puis ré-effectué le 12 mars 2024.
# download.file("https://didomena.ehess.fr/downloads/ns064f993?locale=fr", "data-raw/temps_long/lieux_cassini_devenus_communes_codebook.ods")
# download.file("https://didomena.ehess.fr/downloads/794085868?locale=fr", "data-raw/temps_long/lieux_cassini_devenus_communes_codebook.pdf")
# Fichiers téléchargés le 12 mars 2024
cassini <- read.csv("data-raw/temps_long/lieux_cassini_devenus_communes.csv",
sep=",", colClasses = "character", head = TRUE, stringsAsFactors = TRUE, fill = TRUE)
# Pour simplifier la suite, on remplace dans la base Cassini les mentions "an3" et "an8" par "1795" et "1800".
# Syntaxe qui nécessite de vérifier que c'est la bonne colonne qu'on modifie :
# colnames(cassini)[30]
colnames(cassini)[30] <- "district_1795"
# colnames(cassini)[31]
colnames(cassini)[31] <- "departement_1795"
# colnames(cassini)[35]
colnames(cassini)[35] <- "pop_1795_info"
# colnames(cassini)[36]
colnames(cassini)[36] <- "pop_1795_val"
# colnames(cassini)[37]
colnames(cassini)[37] <- "pop_1800_info"
# colnames(cassini)[38]
colnames(cassini)[38] <- "pop_1800_val"
# Tentative de liaison entre la base cassini et la base DAC
load("Archives/data_prep 2011-2021(01)/data/refdata.Rdata")
cassini <- merge(cassini, df_new[, c("CODGEO_new", "NbrComFus")], by.x = "commune_mars_2021", by.y = "CODGEO_new", all.x = TRUE)
# Attention, dans la base Cassini, les communes_mars_2021 sont présentes plusieurs fois
# La variable "departement_1999" permet de localiser l'ensemble des communes. Ce qui permet d'isoler certaines parties du territoire
# table(is.na(cassini$commune_mars_2021))
# Pour la commune de Vornay (Cher), la base indique "s" comme département. On remplace par "18".
# cassini$nom_1999[which(cassini$departement_1999 == "s")]
cassini$departement_1999[which(cassini$departement_1999 == "s")] <- 18
# On corrige simplement les départements avec un seul chiffre (1, 2, 3 etc) pour homogénéiser (transformés en 01, 02, 03 etc)
cassini$departement_1999 <- stringr::str_pad(cassini$departement_1999, 2, pad = "0")
print ("Les départements 1999 représentés dans la base Cassini")
## [1] "Les départements 1999 représentés dans la base Cassini"
table(cassini$departement_1999)
##
## 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16
## 511 911 441 269 201 166 386 559 477 504 506 678 126 929 290 459
## 17 18 19 21 22 23 24 25 26 27 28 29 2A 2B 30 31
## 544 330 339 759 402 408 721 704 419 872 473 310 129 248 399 671
## 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
## 697 613 389 376 297 325 618 765 393 332 368 304 231 372 472 448
## 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
## 206 428 697 723 563 294 679 606 268 1003 403 707 769 634 1022 502
## 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
## 683 517 280 594 400 318 678 643 421 344 337 15 1002 593 278 373
## 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
## 1017 397 272 163 168 336 356 253 569 498 108 210 36 40 49 199
# Dans certains enregistrements, il y a la mention "lac" alors que normalement c'est "lac.". On procède donc au remplacement
table(cassini$pop_1820_info) # Par exemple
##
## adm. ill. lac lac. pop si
## 388 37 8 34 39020 4305
cassini[cassini == "lac"] <- "lac."
# Possible de retirer certains départements
# cassini_reduite <- subset(cassini, departement_1999 != "2A" & departement_1999 != "2B" & departement_1999 != "73" & departement_1999 != "74")
# table(cassini_reduite$departement_1999)
Affichage des métadonées disponibles :
# Tranformation du data.frame cassini en objet spatial grâce au champs "position_cassini"
cassini_pos <- st_sf(
cassini,
geometry = st_as_sfc(cassini$position_cassini),
crs = "EPSG:2154"
)
# Changement de la projection pour correspondre à celle des communes
cassini_pos <- st_transform(x = cassini_pos, crs = st_crs(geom2011))
# Jointure spatiale
# Nous voulons obtenir les informations du polygones dans lequel se trouve chaque point de la géométrie cassini_pos
cassini_pos <- st_join(x = cassini_pos, y = geom2011[, "CODGEO"], join = st_intersects)
# Les dernières colonnes de cassini sont les variables (1 seule ici, CODGEO) de la table des polygones
head(cassini_pos[, c(1:4, ncol(cassini_pos)-1)])
## Simple feature collection with 6 features and 5 fields
## Geometry type: POINT
## Dimension: XY
## Bounding box: xmin: 3356558 ymin: 2907921 xmax: 4080859 ymax: 2945601
## Projected CRS: ETRS89-extended / LAEA Europe
## commune_mars_2021 gid noacass featuretype CODGEO geometry
## 1 4505 61498 clocher <NA> POINT (3481910 2945601)
## 2 8091 11062 château <NA> POINT (4080859 2907921)
## 3 4118 61496 clocher <NA> POINT (3477554 2930929)
## 4 8158 3382 autre <NA> POINT (4074042 2918234)
## 5 34781 27768 hameau 22253 POINT (3356558 2936974)
## 6 8285 19821 clocher <NA> POINT (4075855 2918136)
# On renome la colonne CODGEO pour davantage de clarté
colnames(cassini_pos)[ncol(cassini_pos)-1]
## [1] "CODGEO"
colnames(cassini_pos)[ncol(cassini_pos)-1] <- "CODGEO_2011"
# Problème : il y a plusieurs communes dont on ne repère pas la position ainsi
cassini_prbl_pos <- subset (cassini_pos, is.na(cassini_pos$CODGEO))
# On observe par départements
table(cassini_prbl_pos$departement_1999)
##
## 01 08 13 17 22 25 29 2A 2B 30 33 34 44 50 56 57 59 64 66 68
## 1 5 6 9 2 2 6 129 248 1 1 1 3 3 3 23 6 1 3 1
## 74 80 83 85
## 3 2 6 2
# Et cartographiquement
plot(cassini_prbl_pos$geometry)
nrow(cassini_prbl_pos)
## [1] 467
# La très grande majorité de ces communes sont sur les frontières françaises, mais elles ne sont que 74.
# Dans le cas où une part sont liées à des questions sur la Corse
# nrow (subset(cassini_prbl_pos, cassini_prbl_pos$departement_1999 != "2A" & cassini_prbl_pos$departement_1999 != "2B"))
rm(cassini_prbl_pos)
# NB : Sans doute y a-t-il moyen de faire beaucoup plus simple sans boucle, mais pas trouvé là
i <- 1
cassini$nbr_si <- NA
# Pour chaque ligne, on compte le nombre de "si" et on le met dans la colonne "nbr_si"
for (i in 1:nrow(cassini)) {
ligne <- as.vector(cassini[i,])
cassini[i, "nbr_si"] <- sum(ligne == "si")
}
test <- subset(cassini, cassini$nbr_si == 1)
write.csv(test, "sorties/cassini_si_une_fois.csv", row.names=FALSE)
test <- subset(cassini, cassini$nbr_si < 6 & cassini$nbr_si > 0)
write.csv(test, "sorties/cassini_si_une_a_cinq_fois.csv", row.names=FALSE)
[Partie de code non utilisée, ne constituait que des tests]
[Partie de code non utilisée, ne constituait que des tests]
Laissé de côté pour l’instant.
# Jointure spatiale
# Nous voulons obtenir les informations du polygones dans lequel se trouve chaque point de la géométrie cassini_pos
cassini_pos <- st_join(x = cassini_pos, y = arrondissements[, 1], join = st_intersects)
# Les dernières colonnes de cassini sont les variables (1 seule ici, CODGEO) de la table des polygones
head(cassini_pos[, c(1:4, ncol(cassini_pos)-1)])
# On renome la colonne CODGEO pour davantage de clarté
# colnames(cassini_pos)[ncol(cassini_pos)-1]
# colnames(cassini_pos)[ncol(cassini_pos)-1] <- "nom_arrond"
Il y a peu de bases de données présentant l’évolution du nombre de communes depuis leur création lors de la Révolution française. En général, la question du changement de périmètre (perte ou acquisition de territoires, les territoires d’outre-rhin, Nice et la Savoie, Alsace-Moselle etc) n’est pas évoquée.
# 1793-1999
# Source : http://cassini.ehess.fr/fr/html/8_glossaire.php?d=BDCarto à la définition du nom "commune"
annees <- c(1793, 1800, 1806, 1876, 1936, 1968, 1975, 1999)
nbr_com <- c(40431, 40345, 40210, 37745, 38014, 37708, 36296, 36565)
# 1876 y compris l’Alsace-Lorraine
graph <- data.frame(annees, nbr_com)
# ajout données 2023 pour voir (sources INSEE, France métropolitaine + oute-mer)
graph[nrow(graph)+1, ] <- c(1982, 36433)
graph[nrow(graph)+1, ] <- c(2012, 36571)
graph[nrow(graph)+1, ] <- c(2023, 34945)
# plot(annees, nbr_com)
ggplot(data=graph, aes(x=annees, y=nbr_com)) +
geom_line() +
labs(title="Évolution du nombre de communes en France", subtitle="1793-2023", x="", y = "", caption="Source : cassini.ehess.fr")
ggplot(data=graph, aes(x=annees, y=nbr_com)) +
geom_line() +
ylim(0, 41000) +
labs(title="Évolution du nombre de communes en France", subtitle="1793-2023", x="", y = "", caption="Source : cassini.ehess.fr")
rm (annees)
Proposition d’une exploitation pour avoir quelques graphiques un peu propres.
# On peut aussi utiliser la colonne "intendances_types"
print ("Les types d'intendances représentés dans la base Cassini")
## [1] "Les types d'intendances représentés dans la base Cassini"
table(cassini$intendances_types)
##
##
## 17
## intendance
## 41710
## intendance,intendance
## 962
## intendance,intendance,intendance
## 21
## intendance,souveraineté étrangère
## 16
## souveraineté étrangère
## 1025
## souveraineté étrangère,intendance
## 26
## souveraineté partagée ou contestée,intendance
## 15
# On décide d'enlever les territoires qui, au départ, étaient au moins en partie sous souveraineté étrangère
cassini_reduite <- subset(cassini, intendances_types != "intendance,souveraineté étrangère" & intendances_types != "souveraineté étrangère" & intendances_types != "souveraineté étrangère,intendance" & intendances_types != "souveraineté partagée ou contestée,intendance")
# On enlève également les territoires perdus en 1870 (Alsace, Moselle)
cassini_reduite <- subset(cassini_reduite, departement_1999 != "57" & departement_1999 != "67" & departement_1999 != "68")
# table(cassini_reduite$departement_1999)
# Test pour ne sélectionner que l'Alsace-Moselle
# cassini_reduite_1870 <- subset(cassini, departement_1999 == "57" | departement_1999 == "67" | departement_1999 == "68")
# cassini_reduite_Savoie <- subset(cassini, departement_1999 == "73" | departement_1999 == "74")
# En l'absence de méta-données détaillées, on choisit de ne s'intéresser qu'aux communes dont la population est renseignée ou simplement lacunaire (devrait être renseignée). On postule que les autres indications désignent des communes n'existant pas à l'époque.
print ("Les types d'informations renseignées pour le recensement de l'an 3 (1794-1795)")
## [1] "Les types d'informations renseignées pour le recensement de l'an 3 (1794-1795)"
table (cassini_reduite$pop_1795_info)
##
## abs. adm. lac. pop si
## 568 31 136 36928 3131
# On cherche les noms des colonnes qui contiennent le motif "_info"
labels_data_pop <- colnames(cassini[grep(pattern = "_info", colnames(cassini), ignore.case = FALSE)])
label <- labels_data_pop [9] # Si besoin pour tests
evol_nbr_com <- data.frame() # Création d'un objet pour récupérer les résultats totaux
evol_nbr_com_reduit <- data.frame() # Création d'un objet pour récupérer les résultats de la base réduite
# Boucle pour exploiter les données date par date
for (label in labels_data_pop) {
annee <- substr(label, start =5, stop = nchar(label)-5) # On repère le n° de l'année en segmentant le label
sous_tableau <- subset(cassini,
cassini[, label] == "pop" | cassini[, label] == "lac." | cassini[, label] == "abs." | cassini[, label] == "ill.") # On crée un sous-tableau comptant uniquement les communes dont la population nous intéresse, à l'année donnée
# sous_tableau <- subset(cassini, cassini[, label] == "pop") # Juste avec les populations connues
nbr_com <- nrow(sous_tableau) # On compte le nombre de communes
sous_tableau_reduit <- subset(cassini_reduite,
cassini_reduite[, label] == "pop" | cassini_reduite[, label] == "lac." | cassini_reduite[, label] == "abs." | cassini_reduite[, label] == "ill.") # On crée un sous-tableau comptant uniquement les communes dont la population nous intéresse, à l'année donnée
# sous_tableau_reduit <- subset(cassini_reduite, cassini_reduite[, label] == "pop") # Juste avec les populations connues
nbr_com_reduit <- nrow(sous_tableau_reduit) # On compte le nombre de communes
i <- c(annee, nbr_com) # On compile les résultats totaux
i_reduit <- c(annee, nbr_com_reduit) # On compile les résultats totaux
evol_nbr_com <- rbind(evol_nbr_com, i, stringsAsFactors = FALSE)
evol_nbr_com_reduit <- rbind(evol_nbr_com_reduit, i_reduit, stringsAsFactors = FALSE)
}
# On traite à la main les deux années 2011 et 2021
# Pour 2011, on fait la liste des CODGEO unique de 2021 et on multiplie par leur nombre de communes fusionnantes (donne le nombre de communes en 2011)
# Pas très propre mais pas l'énergie de faire mieux là...
CODGEO_2021 <- as.data.frame(unique(cassini$commune_mars_2021))
colnames(CODGEO_2021) <- "CODGEO_new"
CODGEO_2021_reduit <- as.data.frame(unique(cassini_reduite$commune_mars_2021))
colnames(CODGEO_2021_reduit) <- "CODGEO_new"
# On joint pour avoir le nombre de communes fusionnantes
CODGEO_2021 <- merge(df_new[c("CODGEO_new", "NbrComFus")], CODGEO_2021, by = "CODGEO_new", all.y = TRUE)
CODGEO_2021_reduit <- merge(df_new[c("CODGEO_new", "NbrComFus")], CODGEO_2021_reduit, by = "CODGEO_new", all.y = TRUE)
# Pour les communes non fusionnantes, on indique qu'il y en a une
CODGEO_2021$NbrComFus[is.na(CODGEO_2021$NbrComFus)] <- 1
CODGEO_2021_reduit$NbrComFus[is.na(CODGEO_2021_reduit$NbrComFus)] <- 1
i_2011 <- c(2011, sum(CODGEO_2021$NbrComFus))
i_2011_reduit <- c(2011, sum(CODGEO_2021_reduit$NbrComFus))
evol_nbr_com <- rbind(evol_nbr_com, i_2011)
evol_nbr_com_reduit <- rbind(evol_nbr_com_reduit, i_2011_reduit)
# Pour 2021, on liste simplement le nombre de CODGEO uniques de 2021 pour chacun des groupe
i_2021 <- c(2021, length(unique(cassini$commune_mars_2021)))
i_2021_reduit <- c(2021, length(unique(cassini_reduite$commune_mars_2021)))
evol_nbr_com <- rbind(evol_nbr_com, i_2021)
evol_nbr_com_reduit <- rbind(evol_nbr_com_reduit, i_2021_reduit)
colnames (evol_nbr_com) <- c("annees", "nbr_com")
colnames (evol_nbr_com_reduit) <- c("annees", "nbr_com")
evol_nbr_com$base <- "tout"
evol_nbr_com_reduit$base <- "tjr_fr"
evol_nbr_com <- rbind(evol_nbr_com, evol_nbr_com_reduit)
# evol_nbr_com[c(1,2), 1] <- c(1795, 1800) # On modifie l'intitulé pour faciliter la représentation graphique
evol_nbr_com$annees[evol_nbr_com$annees == "an3"] <- 1795
evol_nbr_com$annees[evol_nbr_com$annees == "an8"] <- 1800
evol_nbr_com[,1] <- as.numeric(evol_nbr_com[,1]) # On passe en numérique pour faciliter la représentation
evol_nbr_com[,2] <- as.numeric(evol_nbr_com[,2]) # Si on veut faire une seule colonne
ggplot(data=evol_nbr_com, aes(x=annees, y=nbr_com, group=base)) +
geom_line(aes(group = base, linetype = base)) +
scale_linetype(name = "Périmètre", labels = c("Territoires toujours français", "Toute base Cassini")) +
scale_x_continuous (breaks = seq(1780, 2030, 20)) +
labs(title="Évolution du nombre de communes", subtitle="1795-2021", x="", y = "", caption="Sources : cassini.ehess.fr, INSEE")
ggplot(data=evol_nbr_com, aes(x=annees, y=nbr_com, group=base)) +
geom_line(aes(group = base, linetype = base)) +
scale_linetype(name = "Périmètre", labels = c("Territoires toujours français", "Toute base Cassini")) +
ylim(0, 41000) +
labs(title="Évolution du nombre de communes", subtitle="1795-2021", x="", y = "", caption="Sources : cassini.ehess.fr, INSEE")
print("Différencier les communes de l'ensemble de la base Cassini et les communes des territoires étant restés français sur toute la période n'a pas grand sens, par exemple car les communes qui ne sont pas françaises restent renseignées, par exemple l'Alsace-Moselle après 1870 ou la Savoie avant 1860.")
## [1] "Différencier les communes de l'ensemble de la base Cassini et les communes des territoires étant restés français sur toute la période n'a pas grand sens, par exemple car les communes qui ne sont pas françaises restent renseignées, par exemple l'Alsace-Moselle après 1870 ou la Savoie avant 1860."
evol_nbr_com <- subset(evol_nbr_com, evol_nbr_com$base == "tout")
ggplot(data=evol_nbr_com, aes(x=annees, y=nbr_com)) +
geom_line() +
scale_x_continuous (breaks = seq(1780, 2030, 20)) +
labs(title="Évolution du nombre de communes", subtitle="1795-2021", x="", y = "", caption="Sources : cassini.ehess.fr, INSEE")
ggplot(data=evol_nbr_com, aes(x=annees, y=nbr_com)) +
geom_line() +
scale_x_continuous (breaks = seq(1780, 2030, 20)) +
ylim(0, 41000) +
labs(title="Évolution du nombre de communes", subtitle="1795-2021", x="", y = "", caption="Sources : cassini.ehess.fr, INSEE")
rm(label, annee, sous_tableau, nbr_com, i, nbr_com_reduit, sous_tableau_reduit, i_reduit, i_2021, i_2021_reduit, CODGEO_2021, CODGEO_2021_reduit, i_2011, i_2011_reduit)
La base Cassini est très riche, mais elle reste tributaire des sources, parfois peu fiables. Ainsi, les données indiquées comme “An 3” (1794-1795) peuvent être considérées comme peu fiables. Nous les retirons donc de l’analyse.
cassini <- subset(cassini, select= -c(pop_1795_info, pop_1795_val))
labels_data_pop <- colnames(cassini[grep(pattern = "_info", colnames(cassini), ignore.case = FALSE)])
num <- 5
par(mfrow = c(2,3))
# On s'intéresse à un recensement, qui n'est pas le premier car il va falloir regarder le recensement précédent également
# On repère ce recensement par sa place dans la liste des recensements
for (num in 2:length(labels_data_pop)) {
annee <- substr(labels_data_pop[num], start =5, stop = nchar(labels_data_pop[num])-5) # On repère le n° de l'année en segmentant le label
annee_preced <- substr(labels_data_pop[num-1], start =5, stop = nchar(labels_data_pop[num-1])-5) # On repère le n° de l'année en segmentant le label
sous_tableau <- cassini_pos[, c("nom_1999", "commune_mars_2021", labels_data_pop[c(num-1, num)])]
colnames(sous_tableau) <- c("nom_1999", "commune_mars_2021", "pop_situation_avant", "pop_date_ref", "geometry") # On renomme les colonnes
# On copie les données dans des colonnes destinées à être modifiées. Pas nécessaire de les créer ainsi mais permet de clarifier la démarche
sous_tableau$situation_avant <- sous_tableau$pop_situation_avant
sous_tableau$date_ref <- sous_tableau$pop_date_ref
# On indique si la commune existe ou non à la date de référence
sous_tableau$date_ref[sous_tableau$date_ref == "pop"
| sous_tableau$date_ref == "lac."
| sous_tableau$date_ref == "abs."
| sous_tableau$date_ref == "adm."
| sous_tableau$date_ref == "ill."
] <- "Existante"
sous_tableau$date_ref[sous_tableau$date_ref != "Existante"] <- "Inexistante"
# table(sous_tableau$date_ref)
# On indique si la commune existe ou non à la date précédente
sous_tableau$situation_avant[sous_tableau$situation_avant == "pop"
| sous_tableau$situation_avant == "lac."
| sous_tableau$situation_avant == "abs."
| sous_tableau$situation_avant == "adm."
| sous_tableau$situation_avant == "ill."
] <- "Existante"
sous_tableau$situation_avant[sous_tableau$situation_avant != "Existante"] <- "Inexistante"
# table(sous_tableau$situation_avant)
sous_tableau$evol_situation[sous_tableau$situation_avant == "Existante" & sous_tableau$date_ref == "Existante"] <- "Perdure"
sous_tableau$evol_situation[sous_tableau$situation_avant == "Existante" & sous_tableau$date_ref == "Inexistante"] <- "Disparition"
sous_tableau$evol_situation[sous_tableau$situation_avant == "Inexistante" & sous_tableau$date_ref == "Existante"] <- "Apparition"
sous_tableau$evol_situation[sous_tableau$situation_avant == "Inexistante" & sous_tableau$date_ref == "Inexistante"] <- "Inexistante"
table(sous_tableau$evol_situation)
# On indique, pour chaque modalité, le nombre de communes concernées
noms_modalites <- c(paste0("Apparition (", sum(sous_tableau$evol_situation == "Apparition"),")"), paste0("Disparition (", sum(sous_tableau$evol_situation == "Disparition"),")"))
sous_tableau$pr_carto[sous_tableau$evol_situation == "Apparition"] <- noms_modalites[1]
sous_tableau$pr_carto[sous_tableau$evol_situation == "Disparition"] <- noms_modalites[2]
table(sous_tableau$pr_carto)
plot(ShpDep, col = "grey", border = "white", axes = FALSE) # Fond de carte
typoLayer(sous_tableau, var = "pr_carto",
colNA = NA, legend.nodata = "Autres communes :\nstables",
add=TRUE,
legend.values.order = noms_modalites,
col = c("red", "blue"),
legend.pos = "topleft",
legend.title.txt = NULL
# legend.title.txt = "Situation des communes\nconnaissant un changement"
)
layoutLayer(title = paste0(annee_preced, "-", annee, " : Les communes connaissant un changement"), coltitle = "black",
# layoutLayer(title = paste0("Les communes connaissant un changement entre ", annee_preced, " et ", annee), coltitle = "black",
sources = "Sources : INSEE, IGN, Cassini.", scale = NULL,
author = "G. Bideau", frame ="", col = NA)
}
# Situation de la Côte d’Or très particulière, qui interroge beaucoup. Donc quelques tests à part pour voir ce que ça donne.
test <- subset (cassini, cassini$departement_1795 == "Côte d'Or")
table(test$pop_1820_info)
table(test$pop_1831_info)
table(test$pop_1836_info)
# Bilan : *a priori*, le fait que ce départemente ressorte beaucoup est bien lié aux données de la base, pas à une erreur de manipulation.
Cf. application Shiny pour les graphiques, la ligne ci-dessous associée à ces graphiques n’est pas jouée pour limiter les ressources sollicitées.
https://gbideau.shinyapps.io/nbr_communes_Fr_shiny/
liste_dep <- sort(unique (cassini$departement_1999))
num_dep <- "01"
# Création d'un tableau pour accueillir les données de l'ensemble des départements
evol_deps <- data.frame()
for (num_dep in liste_dep) {
cassini_reduite <- subset(cassini, departement_1999 == num_dep)
nom_dep <- dep$LIBELLE[dep$CODE_DEPT == num_dep]
evol_nbr_com_reduit <- data.frame() # Création d'un objet pour récupérer les résultats de la base réduite
# label <- labels_data_pop[32]
# Boucle pour exploiter les données date par date
for (label in labels_data_pop) {
annee <- substr(label, start =5, stop = nchar(label)-5) # On repère le n° de l'année en segmentant le label
sous_tableau_reduit <- subset(cassini_reduite, cassini_reduite[, label] == "pop" | cassini_reduite[, label] == "lac." | cassini_reduite[, label] == "abs.") # On crée un sous-tableau comptant uniquement les communes dont la population nous intéresse, à l'année donnée
# sous_tableau_reduit <- subset(cassini_reduite, cassini_reduite[, label] == "pop") # Juste avec les populations connues
nbr_com_reduit <- nrow(sous_tableau_reduit) # On compte le nombre de communes
pop_annee_dep <- sum(as.numeric(sous_tableau_reduit[, paste0("pop_", annee, "_val")]), na.rm=TRUE)
i_reduit <- c(annee, nbr_com_reduit, pop_annee_dep) # On compile les résultats totaux
evol_nbr_com_reduit <- rbind(evol_nbr_com_reduit, i_reduit, stringsAsFactors = FALSE)
}
# On traite à la main les deux années 2011 et 2021
# Pour 2011, on fait la liste des CODGEO unique de 2021 et on multiplie par leur nombre de communes fusionnantes (donne le nombre de communes en 2011)
# Pas très propre mais pas l'énergie de faire mieux là...
CODGEO_2021_reduit <- as.data.frame(unique(cassini_reduite$commune_mars_2021))
colnames(CODGEO_2021_reduit) <- "CODGEO_new"
# On joint pour avoir le nombre de communes fusionnantes
CODGEO_2021_reduit <- merge(df_new[c("CODGEO_new", "NbrComFus", "P09_POP")], CODGEO_2021_reduit, by = "CODGEO_new", all.y = TRUE)
# Pour les communes non fusionnantes, on indique qu'il y en a une
CODGEO_2021_reduit$NbrComFus[is.na(CODGEO_2021_reduit$NbrComFus)] <- 1
i_2011_reduit <- c(2011, sum(CODGEO_2021_reduit$NbrComFus, na.rm=TRUE), sum(CODGEO_2021_reduit$P09_POP, na.rm = TRUE))
evol_nbr_com_reduit <- rbind(evol_nbr_com_reduit, i_2011_reduit)
# Pour 2021, on liste simplement le nombre de CODGEO uniques de 2021 pour chacun des groupe
i_2021_reduit <- c(2021, length(unique(cassini_reduite$commune_mars_2021)), NA)
evol_nbr_com_reduit <- rbind(evol_nbr_com_reduit, i_2021_reduit)
colnames (evol_nbr_com_reduit) <- c("annees", "nbr_com", "population")
evol_nbr_com <- evol_nbr_com_reduit
# evol_nbr_com[c(1,2), 1] <- c(1795, 1800) # On modifie l'intitulé pour faciliter la représentation graphique
# Est désormais fait plus haut
# evol_nbr_com$annees[evol_nbr_com$annees == "an3"] <- 1795
# evol_nbr_com$annees[evol_nbr_com$annees == "an8"] <- 1800
evol_nbr_com[,1] <- as.numeric(evol_nbr_com[,1]) # On passe en numérique pour faciliter la représentation
evol_nbr_com[,2] <- as.numeric(evol_nbr_com[,2]) # Si on veut faire une seule colonne
evol_nbr_com[,3] <- as.numeric(evol_nbr_com[,3]) # Si on veut faire une seule colonne
# Calcul de l'évolution en valeur absolue du nombre de commune dans le département
evol_nbr_com$evol <- evol_nbr_com$nbr_com - lag(evol_nbr_com$nbr_com)
# Calcul du taux d'évolution
evol_nbr_com$tx_evol <- round(100 * (evol_nbr_com$nbr_com - lag(evol_nbr_com$nbr_com)) / lag(evol_nbr_com$nbr_com), 2)
# On compile les résultats du département en question
departement <- c(nom_dep, num_dep, evol_nbr_com$nbr_com, evol_nbr_com$population, evol_nbr_com$evol, evol_nbr_com$tx_evol)
# On ajoute ces résultats dans le tableau global
evol_deps <- rbind (evol_deps, departement, stringsAsFactors = FALSE)
# ggplot(data=evol_nbr_com, aes(x=annees, y=nbr_com)) +
# geom_line() +
# scale_x_continuous (breaks = seq(1780, 2030, 20)) +
# labs(title="Évolution du nombre de communes en Aveyron", subtitle="1795-2021", x="", y = "", caption="Sources : cassini.ehess.fr, INSEE")
graphique <- ggplot(data=evol_nbr_com, aes(x=annees, y=nbr_com)) +
geom_line() +
ylim(0, max(evol_nbr_com$nbr_com)+50) +
scale_x_continuous (breaks = seq(1780, 2030, 20)) +
labs(title= paste0("Évolution du nombre de communes en ", nom_dep, " (", num_dep, ")"), subtitle="1795-2021", x="", y = "", caption="Sources : cassini.ehess.fr, INSEE")
# LIGNE À DÉCOMMENTER SI ON SOUHAITE AFFICHER LES GRAPHIQUES
# print(graphique)
# Pour avoir un graphique plus complet, on change la forme des données
pr_graph <- melt(evol_nbr_com, id.vars = "annees")
ggplot(data=pr_graph, aes(x=annees, y = value)) +
geom_line(aes(color = variable, linetype = variable)) +
# ylim(min(evol_nbr_com$evol), max(evol_nbr_com$nbr_com)+50) +
scale_x_continuous (breaks = seq(1780, 2030, 20)) +
scale_linetype(name = "Évolution", labels = c("Nombre de communes", "Différence entre recensements", "Taux d'évolution entre recensements")) +
scale_color_discrete(name = "Évolution", labels = c("Nombre de communes", "Différence entre recensements", "Taux d'évolution entre recensements")) +
labs(title= paste0("Communes par départements : ", nom_dep, " (", num_dep, ")"), subtitle="1795-2021", x="", y = "", caption="Sources : cassini.ehess.fr, INSEE")
rm(label, annee, nbr_com_reduit, sous_tableau_reduit, i_reduit, i_2021_reduit, CODGEO_2021_reduit, i_2011_reduit, graphique)
}
# Création d'une colonne identifiant les deux recensements en jeu dans les évolutions
evol_nbr_com$ident_evol <- paste0("evol_", lag(evol_nbr_com$annees), "_", evol_nbr_com$annees)
# On identifie les colonnes du tableau regroupant les données de tous les départements
colnames(evol_deps) <- c("Département", "CODE_DEPT", evol_nbr_com$annees, paste0("pop_", evol_nbr_com$annees), evol_nbr_com$ident_evol, paste0("tx_", evol_nbr_com$ident_evol))
# print (evol_deps)
evol_deps_affichage <- evol_deps
colnames(evol_deps_affichage) <- c("Département", "N° Département", evol_nbr_com$annees, paste0("pop_", evol_nbr_com$annees), evol_nbr_com$ident_evol, paste0("tx_", evol_nbr_com$ident_evol))
nbr_col <- length(labels_data_pop) + 2
kable(evol_deps_affichage, row.names = F, digits = 2, align = "c",
caption = "Évolution des communes par départements (à la géographie 1999)") %>%
kableExtra::add_header_above(c(" " = 2, "Nombre de communes" = nbr_col, "Population" = nbr_col, "Évolution en valeur absolue" = nbr_col, "Taux d'évolution entre chaque recensement" = nbr_col))
| Département | N° Département | 1800 | 1806 | 1820 | 1831 | 1836 | 1841 | 1846 | 1851 | 1856 | 1861 | 1866 | 1872 | 1876 | 1881 | 1886 | 1891 | 1896 | 1901 | 1906 | 1911 | 1921 | 1926 | 1931 | 1936 | 1946 | 1954 | 1962 | 1968 | 1975 | 1982 | 1990 | 1999 | 2011 | 2021 | pop_1800 | pop_1806 | pop_1820 | pop_1831 | pop_1836 | pop_1841 | pop_1846 | pop_1851 | pop_1856 | pop_1861 | pop_1866 | pop_1872 | pop_1876 | pop_1881 | pop_1886 | pop_1891 | pop_1896 | pop_1901 | pop_1906 | pop_1911 | pop_1921 | pop_1926 | pop_1931 | pop_1936 | pop_1946 | pop_1954 | pop_1962 | pop_1968 | pop_1975 | pop_1982 | pop_1990 | pop_1999 | pop_2011 | pop_2021 | evol_1800_1800 | evol_1806_1806 | evol_1820_1820 | evol_1831_1831 | evol_1836_1836 | evol_1841_1841 | evol_1846_1846 | evol_1851_1851 | evol_1856_1856 | evol_1861_1861 | evol_1866_1866 | evol_1872_1872 | evol_1876_1876 | evol_1881_1881 | evol_1886_1886 | evol_1891_1891 | evol_1896_1896 | evol_1901_1901 | evol_1906_1906 | evol_1911_1911 | evol_1921_1921 | evol_1926_1926 | evol_1931_1931 | evol_1936_1936 | evol_1946_1946 | evol_1954_1954 | evol_1962_1962 | evol_1968_1968 | evol_1975_1975 | evol_1982_1982 | evol_1990_1990 | evol_1999_1999 | evol_2011_2011 | evol_2021_2021 | tx_evol_1800_1800 | tx_evol_1806_1806 | tx_evol_1820_1820 | tx_evol_1831_1831 | tx_evol_1836_1836 | tx_evol_1841_1841 | tx_evol_1846_1846 | tx_evol_1851_1851 | tx_evol_1856_1856 | tx_evol_1861_1861 | tx_evol_1866_1866 | tx_evol_1872_1872 | tx_evol_1876_1876 | tx_evol_1881_1881 | tx_evol_1886_1886 | tx_evol_1891_1891 | tx_evol_1896_1896 | tx_evol_1901_1901 | tx_evol_1906_1906 | tx_evol_1911_1911 | tx_evol_1921_1921 | tx_evol_1926_1926 | tx_evol_1931_1931 | tx_evol_1936_1936 | tx_evol_1946_1946 | tx_evol_1954_1954 | tx_evol_1962_1962 | tx_evol_1968_1968 | tx_evol_1975_1975 | tx_evol_1982_1982 | tx_evol_1990_1990 | tx_evol_1999_1999 | tx_evol_2011_2011 | tx_evol_2021_2021 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Ain | 01 | 434 | 436 | 434 | 436 | 438 | 437 | 441 | 441 | 442 | 445 | 445 | 448 | 448 | 448 | 448 | 448 | 448 | 450 | 450 | 451 | 451 | 451 | 451 | 451 | 450 | 450 | 450 | 443 | 419 | 419 | 419 | 419 | 422 | 396 | 299282 | 319765 | 325523 | 342064 | 342513 | 351932 | 360362 | 368981 | 360726 | 359404 | 361208 | 351276 | 357878 | 356529 | 356743 | 350412 | 345111 | 342788 | 338312 | 334911 | 308958 | 309233 | 312192 | 304712 | 298367 | 301176 | 314664 | 339262 | 376477 | 418516 | 471019 | 515270 | 592656 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Aisne | 02 | 853 | 853 | 850 | 837 | 839 | 839 | 837 | 836 | 836 | 835 | 836 | 836 | 836 | 837 | 839 | 839 | 840 | 840 | 840 | 840 | 838 | 833 | 833 | 833 | 833 | 833 | 832 | 830 | 819 | 817 | 817 | 816 | 817 | 801 | 425728 | 442633 | 459305 | 512772 | 526931 | 541727 | 556998 | 558887 | 545659 | 560821 | 564278 | 552032 | 559340 | 556376 | 555541 | 545039 | 541169 | 535169 | 534106 | 529881 | 421040 | 488723 | 489081 | 484378 | 453169 | 486808 | 512645 | 526080 | 533862 | 533970 | 537259 | 535842 | 541285 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Allier | 03 | 347 | 345 | 338 | 328 | 322 | 316 | 316 | 317 | 317 | 317 | 317 | 317 | 317 | 321 | 321 | 321 | 321 | 321 | 321 | 321 | 321 | 321 | 321 | 321 | 321 | 321 | 321 | 321 | 320 | 320 | 320 | 320 | 321 | 318 | 248864 | 260266 | 276582 | 298750 | 309270 | 311361 | 329540 | 336758 | 352241 | 356432 | 376164 | 390812 | 405783 | 416759 | 424582 | 424382 | 424378 | 422024 | 417961 | 406291 | 370950 | 370562 | 373924 | 368778 | 373481 | 372689 | 380221 | 386533 | 378406 | 369580 | 357710 | 344721 | 343780 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Alpes-de-Haute-Provence | 04 | 261 | 260 | 258 | 257 | 257 | 256 | 255 | 255 | 254 | 251 | 251 | 251 | 251 | 251 | 251 | 250 | 250 | 250 | 250 | 248 | 248 | 247 | 247 | 245 | 243 | 243 | 238 | 237 | 199 | 200 | 200 | 200 | 200 | 198 | 119048 | 145912 | 149310 | 155596 | 159053 | 156155 | 156677 | 152087 | 149670 | 146368 | 143000 | 139332 | 136166 | 131899 | 129494 | 124285 | 118142 | 115021 | 113126 | 107231 | 91882 | 88347 | 87893 | 85090 | 83354 | 84335 | 91843 | 104813 | 112178 | 119068 | 130883 | 139561 | 159450 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Hautes-Alpes | 05 | 189 | 189 | 189 | 189 | 189 | 189 | 189 | 189 | 189 | 189 | 189 | 189 | 189 | 189 | 189 | 188 | 187 | 187 | 186 | 186 | 186 | 186 | 186 | 184 | 182 | 181 | 181 | 179 | 175 | 175 | 177 | 177 | 178 | 163 | 113527 | 125844 | 121418 | 129102 | 131162 | 132580 | 132888 | 131805 | 129556 | 125100 | 122117 | 118897 | 119094 | 121787 | 122924 | 115522 | 113229 | 109510 | 107498 | 105083 | 89275 | 87963 | 87566 | 88210 | 84932 | 85067 | 87436 | 91790 | 97358 | 105070 | 113300 | 121419 | 135978 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Alpes-Maritimes | 06 | 150 | 150 | 147 | 149 | 150 | 148 | 149 | 148 | 147 | 146 | 146 | 150 | 152 | 152 | 152 | 153 | 153 | 153 | 155 | 159 | 159 | 160 | 161 | 161 | 163 | 163 | 163 | 163 | 163 | 163 | 163 | 163 | 163 | 163 | 134854 | 140873 | 154304 | 65495 | 176302 | 63234 | 183578 | 67751 | 184047 | 194776 | 197502 | 199597 | 203604 | 226621 | 238057 | 258571 | 265155 | 293213 | 334007 | 356338 | 357759 | 435253 | 493376 | 513714 | 452546 | 515484 | 618265 | 722070 | 816681 | 881198 | 971829 | 1011326 | 1079100 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Ardèche | 07 | 335 | 335 | 335 | 328 | 330 | 331 | 333 | 334 | 338 | 339 | 339 | 339 | 339 | 339 | 339 | 339 | 339 | 340 | 342 | 345 | 347 | 348 | 349 | 349 | 349 | 349 | 349 | 349 | 342 | 338 | 339 | 339 | 339 | 335 | 266656 | 290833 | 304289 | 340527 | 350828 | 364427 | 379677 | 385963 | 385357 | 388929 | 387193 | 380175 | 384378 | 376907 | 375472 | 371269 | 363501 | 353564 | 347140 | 331801 | 294308 | 289263 | 282911 | 272698 | 254598 | 249077 | 248516 | 256927 | 257065 | 267970 | 277581 | 286023 | 313578 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Ardennes | 08 | 539 | 540 | 538 | 478 | 477 | 478 | 478 | 477 | 478 | 478 | 478 | 500 | 502 | 502 | 503 | 503 | 503 | 503 | 503 | 503 | 503 | 503 | 503 | 503 | 503 | 503 | 502 | 485 | 459 | 459 | 462 | 463 | 463 | 449 | 236227 | 251166 | 266991 | 289941 | 306150 | 318970 | 326367 | 330137 | 0 | 0 | 325303 | 318828 | 326782 | 333675 | 332759 | 324923 | 318865 | 315589 | 317505 | 318896 | 277811 | 297448 | 293746 | 288632 | 245335 | 280490 | 300245 | 309378 | 309306 | 302338 | 296357 | 290130 | 283296 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Ariège | 09 | 336 | 336 | 336 | 334 | 335 | 335 | 334 | 336 | 335 | 335 | 334 | 335 | 335 | 335 | 335 | 336 | 337 | 337 | 337 | 337 | 337 | 337 | 340 | 340 | 340 | 341 | 341 | 339 | 331 | 331 | 331 | 331 | 332 | 327 | 194216 | 221163 | 233015 | 251803 | 258545 | 262448 | 268448 | 265592 | 249608 | 250171 | 248804 | 244605 | 243100 | 238855 | 234806 | 225882 | 218096 | 208024 | 204204 | 197101 | 171288 | 166168 | 159927 | 153822 | 144455 | 138588 | 135564 | 136790 | 136295 | 134247 | 134966 | 135764 | 150943 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Aube | 10 | 452 | 451 | 451 | 447 | 446 | 446 | 446 | 447 | 446 | 446 | 446 | 446 | 446 | 446 | 446 | 446 | 446 | 446 | 446 | 445 | 445 | 445 | 445 | 445 | 445 | 445 | 445 | 443 | 430 | 430 | 431 | 431 | 433 | 431 | 231838 | 238819 | 230688 | 246518 | 253641 | 258013 | 261355 | 264642 | 261631 | 262590 | 261458 | 255132 | 255217 | 255326 | 257374 | 255548 | 251435 | 246163 | 243670 | 240755 | 227839 | 238253 | 242596 | 239563 | 235237 | 240797 | 255099 | 270325 | 284823 | 289300 | 289207 | 292131 | 303298 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Aude | 11 | 434 | 433 | 434 | 434 | 433 | 433 | 434 | 434 | 434 | 434 | 435 | 436 | 436 | 437 | 437 | 437 | 439 | 439 | 439 | 440 | 440 | 440 | 440 | 441 | 441 | 441 | 441 | 439 | 437 | 437 | 438 | 438 | 438 | 433 | 225228 | 240993 | 252874 | 273733 | 285419 | 280849 | 287250 | 290125 | 282786 | 283460 | 288709 | 286613 | 300065 | 327988 | 332080 | 317372 | 310513 | 313531 | 308327 | 300537 | 287052 | 291951 | 296880 | 285115 | 268889 | 268254 | 269782 | 278323 | 272366 | 280686 | 298712 | 309770 | 353980 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Aveyron | 12 | 529 | 184 | 194 | 218 | 241 | 259 | 274 | 281 | 282 | 282 | 285 | 289 | 295 | 301 | 302 | 302 | 302 | 302 | 304 | 306 | 306 | 306 | 306 | 306 | 306 | 307 | 307 | 306 | 304 | 304 | 304 | 304 | 306 | 287 | 313010 | 331373 | 339422 | 358502 | 364781 | 372465 | 385703 | 391129 | 391250 | 395903 | 399295 | 399813 | 413826 | 415075 | 415826 | 400467 | 389464 | 382074 | 377289 | 369448 | 332940 | 328886 | 323782 | 314682 | 307717 | 292727 | 290489 | 281568 | 278306 | 278654 | 270141 | 263808 | 277240 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Bouches-du-Rhône | 13 | 109 | 109 | 106 | 105 | 106 | 106 | 106 | 106 | 106 | 106 | 107 | 108 | 108 | 109 | 109 | 109 | 109 | 110 | 111 | 111 | 111 | 114 | 114 | 116 | 117 | 118 | 118 | 119 | 119 | 119 | 119 | 119 | 119 | 119 | 285012 | 293236 | 313612 | 358742 | 361632 | 374673 | 413918 | 428892 | 473365 | 507113 | 547903 | 554902 | 556379 | 589028 | 604857 | 630622 | 673820 | 734347 | 765918 | 805539 | 841996 | 929549 | 1101672 | 1224802 | 971935 | 1048762 | 1248355 | 1470271 | 1632974 | 1724199 | 1759381 | 1831009 | 1967299 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Calvados | 14 | 896 | 896 | 890 | 832 | 810 | 792 | 791 | 784 | 784 | 765 | 765 | 764 | 750 | 763 | 763 | 763 | 763 | 763 | 763 | 763 | 763 | 763 | 763 | 763 | 763 | 760 | 754 | 749 | 704 | 704 | 705 | 705 | 709 | 530 | 451062 | 505238 | 492407 | 494516 | 488474 | 495855 | 498181 | 491210 | 478397 | 480992 | 474909 | 454012 | 442284 | 439830 | 437267 | 428945 | 417176 | 410179 | 403431 | 396318 | 384730 | 390492 | 401356 | 404901 | 400026 | 442688 | 480757 | 519695 | 560967 | 589559 | 618478 | 648385 | 682868 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Cantal | 15 | 269 | 269 | 269 | 260 | 256 | 257 | 258 | 259 | 259 | 259 | 260 | 264 | 266 | 267 | 267 | 267 | 267 | 267 | 267 | 267 | 267 | 267 | 267 | 267 | 268 | 269 | 269 | 268 | 258 | 259 | 260 | 260 | 261 | 247 | 219810 | 250864 | 251448 | 257585 | 261364 | 255734 | 258733 | 253253 | 246518 | 239399 | 238009 | 232903 | 231086 | 236190 | 241742 | 239601 | 234382 | 230511 | 228690 | 223361 | 199402 | 196999 | 193505 | 190888 | 186843 | 177065 | 172977 | 169330 | 166549 | 162838 | 158723 | 150778 | 148581 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Charente | 16 | 454 | 453 | 453 | 452 | 456 | 439 | 434 | 434 | 431 | 427 | 427 | 426 | 426 | 426 | 426 | 426 | 426 | 426 | 426 | 426 | 426 | 426 | 426 | 425 | 424 | 424 | 424 | 423 | 405 | 405 | 405 | 404 | 404 | 365 | 320118 | 326680 | 347299 | 361288 | 0 | 367893 | 379031 | 382912 | 378721 | 379081 | 378218 | 367520 | 373950 | 370742 | 366408 | 360259 | 356236 | 350305 | 351733 | 347061 | 316369 | 312790 | 310489 | 309279 | 311137 | 313635 | 327658 | 331016 | 337064 | 340770 | 341993 | 339628 | 351563 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Charente-Maritime | 17 | 506 | 506 | 505 | 481 | 480 | 480 | 480 | 480 | 480 | 479 | 479 | 479 | 481 | 480 | 480 | 480 | 480 | 480 | 481 | 482 | 482 | 482 | 483 | 483 | 483 | 486 | 486 | 484 | 472 | 472 | 472 | 472 | 474 | 465 | 399162 | 393039 | 409478 | 445291 | 449753 | 457694 | 467048 | 469439 | 474858 | 480350 | 479486 | 466051 | 465628 | 466416 | 462803 | 456202 | 453455 | 452149 | 453793 | 450871 | 418310 | 417789 | 415249 | 419021 | 416187 | 447973 | 470897 | 483622 | 497859 | 513220 | 527146 | 557024 | 616887 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Cher | 18 | 304 | 304 | 304 | 297 | 297 | 293 | 291 | 291 | 290 | 290 | 291 | 291 | 291 | 291 | 291 | 292 | 292 | 292 | 292 | 293 | 293 | 293 | 293 | 293 | 290 | 290 | 290 | 290 | 290 | 290 | 290 | 290 | 290 | 287 | 217785 | 229247 | 239561 | 256247 | 276856 | 273947 | 294726 | 306959 | 314917 | 323444 | 336601 | 335372 | 345613 | 351405 | 355349 | 359276 | 347725 | 345543 | 343484 | 337810 | 304800 | 298398 | 293918 | 288695 | 286070 | 284376 | 293514 | 304601 | 316350 | 320174 | 321559 | 314428 | 311022 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Corrèze | 19 | 294 | 293 | 294 | 291 | 292 | 290 | 286 | 286 | 286 | 286 | 286 | 286 | 287 | 287 | 287 | 287 | 287 | 288 | 289 | 289 | 289 | 289 | 289 | 289 | 289 | 289 | 289 | 289 | 285 | 286 | 286 | 286 | 287 | 281 | 243654 | 254271 | 273378 | 293853 | 302478 | 304958 | 315974 | 320865 | 314986 | 310118 | 310843 | 301828 | 310485 | 316820 | 326494 | 328119 | 322393 | 318422 | 317430 | 309646 | 273808 | 269289 | 264129 | 262770 | 254574 | 242798 | 237926 | 237858 | 240363 | 241448 | 237908 | 232576 | 245385 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Côte-d’Or | 21 | 728 | 730 | 727 | 486 | 727 | 727 | 728 | 727 | 727 | 717 | 717 | 717 | 717 | 717 | 717 | 717 | 717 | 717 | 717 | 717 | 717 | 717 | 717 | 717 | 717 | 717 | 717 | 716 | 705 | 707 | 707 | 707 | 706 | 698 | 339562 | 355436 | 358148 | 252301 | 385073 | 383564 | 389799 | 399611 | 384416 | 383335 | 381624 | 373406 | 377663 | 382819 | 381574 | 376866 | 368168 | 361626 | 357959 | 350044 | 321088 | 328881 | 333800 | 334386 | 335602 | 356839 | 387869 | 421192 | 456070 | 473548 | 493866 | 506755 | 524144 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Côtes-d’Armor | 22 | 379 | 379 | 378 | 376 | 376 | 376 | 376 | 378 | 379 | 383 | 385 | 389 | 389 | 389 | 389 | 389 | 390 | 390 | 390 | 390 | 390 | 390 | 390 | 391 | 391 | 391 | 385 | 385 | 369 | 369 | 372 | 372 | 374 | 349 | 504303 | 519618 | 552333 | 599249 | 604683 | 607868 | 629018 | 629402 | 621606 | 628936 | 644821 | 622856 | 630957 | 627585 | 628256 | 618652 | 616074 | 609349 | 611506 | 605523 | 557824 | 552788 | 539531 | 531840 | 526955 | 503178 | 501923 | 506102 | 525556 | 538869 | 538395 | 542373 | 587519 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Creuse | 23 | 295 | 296 | 292 | 282 | 269 | 265 | 262 | 261 | 261 | 261 | 261 | 263 | 263 | 264 | 266 | 266 | 266 | 266 | 266 | 266 | 266 | 266 | 266 | 266 | 266 | 266 | 266 | 264 | 260 | 260 | 260 | 260 | 261 | 257 | 218041 | 226224 | 248785 | 265640 | 276164 | 278418 | 285720 | 287181 | 278869 | 270055 | 274167 | 274663 | 278423 | 278782 | 284942 | 284660 | 279366 | 277831 | 274094 | 266188 | 228244 | 219148 | 207882 | 201844 | 188669 | 172702 | 163515 | 156876 | 146214 | 139968 | 131349 | 124470 | 124000 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Dordogne | 24 | 641 | 639 | 635 | 584 | 583 | 583 | 584 | 585 | 584 | 582 | 582 | 582 | 582 | 583 | 583 | 585 | 585 | 585 | 587 | 587 | 587 | 587 | 587 | 587 | 587 | 587 | 580 | 575 | 555 | 556 | 557 | 557 | 559 | 507 | 409800 | 423911 | 453136 | 482654 | 487560 | 489822 | 501331 | 505087 | 504600 | 501029 | 500543 | 477389 | 489848 | 495037 | 492205 | 478471 | 464822 | 452951 | 447152 | 437432 | 396742 | 392489 | 383720 | 386963 | 387643 | 377870 | 375455 | 374073 | 373179 | 377356 | 386365 | 388293 | 413181 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Doubs | 25 | 658 | 653 | 648 | 640 | 641 | 641 | 641 | 641 | 641 | 640 | 640 | 638 | 639 | 639 | 639 | 639 | 638 | 638 | 638 | 637 | 637 | 637 | 637 | 637 | 637 | 637 | 636 | 636 | 594 | 592 | 594 | 594 | 595 | 574 | 230694 | 240783 | 242782 | 265696 | 276609 | 286416 | 292507 | 296813 | 287002 | 296385 | 298249 | 291302 | 306211 | 310915 | 311076 | 303176 | 302143 | 298973 | 298537 | 300039 | 285106 | 296678 | 305591 | 304915 | 298355 | 327280 | 384979 | 426469 | 471082 | 477163 | 484770 | 499062 | 525276 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Drôme | 26 | 361 | 359 | 359 | 359 | 359 | 360 | 362 | 362 | 365 | 366 | 367 | 370 | 372 | 376 | 379 | 379 | 379 | 379 | 379 | 378 | 378 | 378 | 378 | 378 | 379 | 381 | 382 | 381 | 372 | 371 | 371 | 370 | 369 | 364 | 235106 | 253372 | 273511 | 299639 | 305501 | 311544 | 320106 | 326314 | 324536 | 327014 | 324227 | 321053 | 321750 | 313763 | 314615 | 306419 | 303491 | 297321 | 297270 | 290894 | 263509 | 263750 | 267080 | 267281 | 268233 | 275290 | 304227 | 342891 | 361847 | 389781 | 414072 | 437778 | 482984 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Eure | 27 | 842 | 841 | 804 | 798 | 794 | 791 | 703 | 704 | 701 | 700 | 700 | 700 | 700 | 700 | 700 | 700 | 700 | 700 | 700 | 700 | 700 | 700 | 700 | 700 | 698 | 699 | 699 | 688 | 676 | 676 | 676 | 675 | 675 | 585 | 402769 | 421460 | 416124 | 424135 | 424292 | 424780 | 423540 | 415777 | 404665 | 398670 | 394467 | 377974 | 373649 | 364291 | 358829 | 349471 | 340652 | 334691 | 330140 | 323763 | 303159 | 308445 | 305788 | 303829 | 315902 | 332514 | 361943 | 383385 | 422952 | 462323 | 513818 | 541054 | 582822 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Eure-et-Loir | 28 | 460 | 460 | 460 | 450 | 439 | 435 | 431 | 428 | 426 | 425 | 425 | 425 | 425 | 425 | 425 | 425 | 425 | 425 | 425 | 425 | 425 | 425 | 425 | 425 | 425 | 425 | 424 | 424 | 401 | 402 | 403 | 403 | 403 | 365 | 257703 | 265937 | 264444 | 278817 | 284992 | 286309 | 292102 | 294640 | 290822 | 290024 | 290519 | 282451 | 282830 | 279877 | 283491 | 284452 | 280226 | 275194 | 273584 | 272037 | 251065 | 254997 | 254603 | 252508 | 257919 | 260851 | 277375 | 302047 | 335151 | 362813 | 396073 | 407665 | 425502 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Finistère | 29 | 290 | 287 | 285 | 282 | 282 | 283 | 283 | 284 | 284 | 284 | 284 | 284 | 287 | 290 | 291 | 291 | 294 | 296 | 296 | 296 | 298 | 299 | 299 | 301 | 295 | 295 | 288 | 286 | 283 | 283 | 283 | 283 | 283 | 277 | 456707 | 453307 | 483512 | 523886 | 546815 | 576586 | 602717 | 617618 | 607817 | 623936 | 662227 | 642545 | 666066 | 681234 | 707820 | 727012 | 739648 | 773014 | 795103 | 809771 | 762514 | 753702 | 744295 | 756793 | 728244 | 727847 | 749558 | 768929 | 804088 | 828364 | 838687 | 852418 | 893914 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Corse-du-Sud | 2A | 114 | 114 | 114 | 115 | 115 | 115 | 115 | 116 | 118 | 118 | 125 | 126 | 126 | 127 | 127 | 127 | 127 | 127 | 127 | 127 | 127 | 127 | 127 | 127 | 127 | 127 | 124 | 124 | 124 | 124 | 124 | 124 | 124 | 124 | 58430 | 59433 | 63017 | 69774 | 71865 | 75976 | 82700 | 84952 | 85781 | 90474 | 95633 | 99651 | 104888 | 110366 | 114012 | 119172 | 123708 | 125193 | 123937 | 122636 | 122538 | 125436 | 128104 | 144824 | 114361 | 112331 | 79756 | 89566 | 100278 | 108604 | 118174 | 118593 | 0 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Haute-Corse | 2B | 239 | 240 | 240 | 240 | 240 | 240 | 240 | 239 | 236 | 235 | 238 | 238 | 237 | 237 | 237 | 237 | 237 | 237 | 237 | 237 | 237 | 237 | 237 | 237 | 239 | 239 | 236 | 236 | 236 | 236 | 236 | 236 | 236 | 236 | 105172 | 113964 | 117241 | 125065 | 136706 | 142354 | 145434 | 150659 | 149673 | 159059 | 163396 | 159389 | 157813 | 162273 | 164489 | 169424 | 166460 | 170396 | 167229 | 166184 | 159421 | 164454 | 169131 | 178030 | 153512 | 134664 | 101306 | 115702 | 125284 | 131574 | 131563 | 141603 | 0 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Gard | 30 | 364 | 364 | 343 | 342 | 344 | 345 | 347 | 348 | 348 | 348 | 347 | 348 | 348 | 350 | 350 | 350 | 350 | 350 | 351 | 351 | 351 | 353 | 353 | 353 | 355 | 355 | 355 | 355 | 353 | 353 | 353 | 353 | 353 | 351 | 300274 | 322144 | 334164 | 357389 | 365678 | 375554 | 400151 | 406731 | 416833 | 422499 | 427407 | 413233 | 423804 | 415628 | 417099 | 419388 | 416036 | 420836 | 421166 | 413457 | 396169 | 402601 | 406815 | 395299 | 380837 | 396742 | 435107 | 478544 | 494575 | 530478 | 585049 | 623125 | 693888 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Haute-Garonne | 31 | 611 | 609 | 606 | 603 | 596 | 590 | 580 | 577 | 578 | 578 | 584 | 584 | 585 | 587 | 587 | 587 | 587 | 588 | 588 | 589 | 589 | 589 | 589 | 589 | 589 | 591 | 593 | 592 | 588 | 587 | 588 | 588 | 589 | 586 | 343883 | 367524 | 391074 | 426412 | 453978 | 468411 | 481938 | 481915 | 480837 | 484141 | 493804 | 478230 | 477730 | 478009 | 481169 | 472383 | 459377 | 448481 | 442065 | 432126 | 424582 | 431505 | 441799 | 458647 | 512260 | 525669 | 594633 | 690712 | 777431 | 824501 | 925962 | 1046338 | 1230819.99602 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Gers | 32 | 684 | 681 | 681 | 503 | 486 | 466 | 466 | 467 | 466 | 466 | 465 | 465 | 465 | 465 | 465 | 465 | 466 | 466 | 466 | 466 | 466 | 466 | 466 | 466 | 466 | 467 | 467 | 466 | 462 | 462 | 462 | 463 | 464 | 462 | 261740 | 284432 | 299404 | 309861 | 0 | 309796 | 313189 | 307479 | 304497 | 298931 | 295692 | 284717 | 283537 | 281532 | 274391 | 261084 | 250472 | 238448 | 231088 | 221994 | 194406 | 196419 | 193134 | 192451 | 190436 | 185111 | 182263 | 181576 | 175366 | 174154 | 174587 | 172335 | 193456 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Gironde | 33 | 567 | 561 | 542 | 543 | 544 | 544 | 544 | 546 | 546 | 547 | 549 | 551 | 552 | 552 | 552 | 553 | 554 | 554 | 554 | 554 | 554 | 554 | 554 | 554 | 555 | 555 | 555 | 548 | 543 | 543 | 542 | 542 | 542 | 535 | 502988 | 514482 | 522253 | 554170 | 555786 | 568034 | 602444 | 614387 | 640757 | 667193 | 701855 | 705149 | 735242 | 748703 | 775845 | 793528 | 809902 | 821131 | 823925 | 829095 | 819128 | 827973 | 852768 | 850567 | 858381 | 896517 | 935448 | 1009390 | 1061480 | 1127546 | 1213499 | 1287334 | 1434661 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Hérault | 34 | 333 | 333 | 332 | 332 | 327 | 326 | 328 | 330 | 330 | 331 | 332 | 335 | 336 | 336 | 338 | 338 | 338 | 340 | 340 | 341 | 342 | 342 | 343 | 343 | 343 | 343 | 343 | 342 | 343 | 343 | 343 | 343 | 343 | 342 | 275413 | 301101 | 324126 | 346454 | 356722 | 366173 | 384610 | 387664 | 399276 | 409487 | 418295 | 428729 | 445053 | 441527 | 439044 | 461651 | 469684 | 489421 | 482779 | 480484 | 488215 | 500575 | 514819 | 502043 | 461100 | 471429 | 516658 | 591397 | 648202 | 706499 | 794603 | 896441 | 1031974 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Ille-et-Vilaine | 35 | 351 | 350 | 350 | 349 | 349 | 347 | 348 | 350 | 350 | 350 | 350 | 352 | 353 | 357 | 357 | 359 | 359 | 360 | 360 | 360 | 360 | 360 | 360 | 361 | 361 | 362 | 362 | 359 | 353 | 352 | 353 | 352 | 355 | 333 | 488846 | 508334 | 533205 | 546835 | 547219 | 549217 | 562872 | 574972 | 580821 | 584257 | 593079 | 589681 | 602712 | 615480 | 621384 | 626875 | 622039 | 613567 | 611805 | 608098 | 558574 | 561688 | 562558 | 565766 | 578246 | 586812 | 614268 | 652722 | 702199 | 749764 | 798718 | 867533 | 981419 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Indre | 36 | 274 | 274 | 260 | 249 | 249 | 248 | 247 | 248 | 246 | 245 | 245 | 245 | 245 | 245 | 245 | 245 | 245 | 245 | 245 | 245 | 247 | 247 | 247 | 248 | 248 | 248 | 248 | 248 | 247 | 247 | 247 | 247 | 247 | 241 | 205628 | 204721 | 230373 | 245531 | 257350 | 253290 | 264315 | 271904 | 273479 | 270054 | 277858 | 277663 | 281248 | 287759 | 296147 | 292868 | 289206 | 288788 | 290216 | 287673 | 260535 | 255095 | 247912 | 245622 | 252075 | 247436 | 251432 | 247178 | 248523 | 243191 | 237510 | 231139 | 232268 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Indre-et-Loire | 37 | 310 | 309 | 303 | 290 | 282 | 281 | 281 | 281 | 281 | 281 | 281 | 281 | 282 | 282 | 282 | 282 | 282 | 282 | 282 | 282 | 282 | 282 | 282 | 282 | 282 | 281 | 281 | 278 | 277 | 277 | 277 | 277 | 277 | 272 | 269036 | 275291 | 282172 | 297116 | 304274 | 306338 | 312420 | 315611 | 318438 | 323579 | 325025 | 317027 | 324875 | 329160 | 340921 | 337298 | 337064 | 335541 | 337916 | 341205 | 327743 | 334486 | 335226 | 343276 | 349675 | 364706 | 395210 | 437870 | 478601 | 506097 | 529345 | 554003 | 588420 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Isère | 38 | 530 | 530 | 527 | 529 | 530 | 525 | 525 | 523 | 524 | 526 | 528 | 531 | 534 | 536 | 539 | 539 | 539 | 539 | 539 | 540 | 540 | 540 | 542 | 542 | 542 | 542 | 540 | 537 | 533 | 533 | 533 | 533 | 533 | 512 | 413117 | 447370 | 476498 | 521515 | 541516 | 553554 | 562570 | 566726 | 550214 | 550724 | 554249 | 550058 | 555190 | 555438 | 555845 | 547424 | 542919 | 544254 | 538308 | 531674 | 502033 | 529816 | 549739 | 540903 | 541899 | 587982 | 676823 | 767367 | 860339 | 936771 | 1016228 | 1094006 | 1197038 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Jura | 39 | 727 | 727 | 707 | 573 | 574 | 579 | 583 | 583 | 583 | 582 | 582 | 583 | 583 | 583 | 583 | 583 | 583 | 583 | 583 | 584 | 584 | 584 | 584 | 584 | 582 | 580 | 579 | 577 | 543 | 543 | 545 | 545 | 545 | 495 | 287988 | 300233 | 301551 | 312343 | 315187 | 316568 | 315990 | 313165 | 296583 | 297946 | 298375 | 287520 | 288721 | 285175 | 281179 | 272933 | 266046 | 261179 | 257626 | 252609 | 228978 | 230598 | 229018 | 220704 | 216286 | 220109 | 225584 | 233441 | 238856 | 242925 | 248759 | 250857 | 262388 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Landes | 40 | 363 | 363 | 352 | 344 | 339 | 339 | 333 | 332 | 332 | 331 | 330 | 331 | 333 | 333 | 333 | 333 | 333 | 333 | 334 | 334 | 334 | 334 | 334 | 334 | 334 | 334 | 334 | 332 | 331 | 331 | 331 | 331 | 331 | 327 | 222293 | 232204 | 252718 | 277331 | 278921 | 282404 | 292157 | 295377 | 302793 | 300839 | 306693 | 299263 | 303508 | 301143 | 302266 | 297902 | 292884 | 291586 | 293467 | 288902 | 263937 | 258038 | 257186 | 251436 | 248395 | 248943 | 260495 | 277381 | 288323 | 297424 | 311461 | 327334 | 379341 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Loir-et-Cher | 41 | 309 | 306 | 299 | 298 | 296 | 296 | 296 | 296 | 296 | 298 | 297 | 297 | 297 | 297 | 297 | 297 | 297 | 297 | 297 | 297 | 297 | 297 | 297 | 297 | 297 | 297 | 296 | 295 | 291 | 291 | 291 | 291 | 291 | 267 | 209966 | 213482 | 227527 | 235750 | 244083 | 249362 | 256383 | 261892 | 264043 | 269029 | 275757 | 268801 | 272634 | 275713 | 279214 | 280358 | 278153 | 275538 | 276019 | 271231 | 251528 | 248099 | 241592 | 240908 | 242419 | 239824 | 250741 | 267896 | 283686 | 296224 | 305937 | 314968 | 327868 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Loire | 42 | 326 | 326 | 326 | 320 | 320 | 318 | 321 | 321 | 317 | 320 | 323 | 327 | 329 | 330 | 331 | 332 | 333 | 333 | 335 | 336 | 337 | 338 | 338 | 338 | 338 | 339 | 331 | 327 | 327 | 327 | 327 | 327 | 327 | 323 | 290903 | 315858 | 343524 | 390847 | 412675 | 434723 | 453928 | 472620 | 505130 | 517604 | 537118 | 550985 | 590613 | 599836 | 603384 | 616227 | 625336 | 647633 | 643943 | 640549 | 637130 | 669216 | 664822 | 650223 | 631591 | 654482 | 696348 | 722443 | 742396 | 739521 | 746288 | 728524 | 746115 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Haute-Loire | 43 | 274 | 274 | 274 | 270 | 266 | 266 | 256 | 257 | 258 | 260 | 261 | 262 | 263 | 264 | 264 | 264 | 265 | 265 | 265 | 265 | 265 | 266 | 267 | 267 | 268 | 268 | 268 | 264 | 260 | 260 | 260 | 260 | 262 | 258 | 234736 | 268212 | 276830 | 291092 | 293190 | 298414 | 306743 | 304421 | 301342 | 305873 | 312937 | 308709 | 313723 | 316461 | 320063 | 316735 | 316699 | 314058 | 314770 | 303838 | 268910 | 260610 | 251608 | 245271 | 228076 | 215577 | 211036 | 208337 | 205491 | 205895 | 206568 | 209113 | 223438 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Loire-Atlantique | 44 | 209 | 209 | 208 | 207 | 206 | 206 | 206 | 206 | 208 | 208 | 213 | 215 | 217 | 217 | 217 | 217 | 217 | 218 | 219 | 218 | 219 | 220 | 220 | 220 | 222 | 223 | 224 | 224 | 221 | 221 | 221 | 221 | 223 | 208 | 369305 | 407827 | 432638 | 470093 | 0 | 486807 | 517381 | 535664 | 555996 | 580207 | 598598 | 602206 | 612970 | 625625 | 643884 | 645263 | 647172 | 664971 | 666748 | 669920 | 649691 | 651547 | 652079 | 659428 | 665064 | 733575 | 803372 | 861452 | 934499 | 995498 | 1052183 | 1134266 | 1269130 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Loiret | 45 | 363 | 363 | 357 | 348 | 348 | 348 | 348 | 348 | 348 | 349 | 349 | 349 | 349 | 349 | 349 | 349 | 349 | 349 | 349 | 349 | 349 | 349 | 349 | 349 | 349 | 349 | 349 | 348 | 334 | 334 | 334 | 334 | 334 | 325 | 286255 | 285395 | 291396 | 305432 | 313106 | 314547 | 330954 | 340138 | 343708 | 352737 | 357110 | 353021 | 360903 | 368526 | 374875 | 377718 | 371019 | 366660 | 364999 | 364061 | 337224 | 341225 | 342679 | 343865 | 346918 | 360523 | 389854 | 430629 | 490189 | 535669 | 580612 | 618126 | 653510 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Lot | 46 | 355 | 303 | 302 | 300 | 300 | 307 | 310 | 314 | 315 | 315 | 318 | 321 | 323 | 323 | 324 | 325 | 327 | 327 | 329 | 329 | 330 | 331 | 334 | 335 | 337 | 340 | 340 | 340 | 340 | 340 | 340 | 340 | 342 | 315 | 262466 | 268351 | 275199 | 284475 | 287062 | 287348 | 291751 | 295916 | 293675 | 295455 | 288919 | 281404 | 276512 | 280269 | 271514 | 253885 | 240403 | 226720 | 216611 | 205769 | 176889 | 171776 | 166637 | 162572 | 154897 | 147754 | 149929 | 151198 | 150778 | 154533 | 155816 | 160197 | 175701 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Lot-et-Garonne | 47 | 383 | 383 | 383 | 354 | 354 | 312 | 312 | 312 | 315 | 316 | 318 | 318 | 325 | 326 | 326 | 326 | 326 | 326 | 326 | 326 | 326 | 326 | 326 | 327 | 328 | 328 | 328 | 326 | 311 | 314 | 317 | 317 | 319 | 319 | 300143 | 326226 | 330119 | 346885 | 346400 | 347073 | 346260 | 341345 | 340041 | 332065 | 327962 | 319289 | 316920 | 312081 | 307437 | 295360 | 286377 | 278740 | 274610 | 268083 | 239972 | 246609 | 247500 | 252761 | 265449 | 265549 | 275028 | 290592 | 292616 | 298522 | 305989 | 305380 | 329697 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Lozère | 48 | 192 | 192 | 191 | 189 | 193 | 193 | 194 | 193 | 193 | 193 | 193 | 194 | 196 | 197 | 197 | 198 | 198 | 198 | 198 | 198 | 198 | 198 | 198 | 198 | 198 | 198 | 197 | 194 | 185 | 185 | 185 | 185 | 184 | 151 | 126344 | 143247 | 133934 | 140460 | 141858 | 144233 | 159137 | 145574 | 141906 | 139089 | 137265 | 135081 | 138318 | 143566 | 141264 | 135527 | 132151 | 128866 | 128016 | 122738 | 108822 | 104733 | 101859 | 98480 | 90523 | 82391 | 81868 | 77258 | 74825 | 74294 | 72825 | 73509 | 76662 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Maine-et-Loire | 49 | 388 | 387 | 382 | 386 | 380 | 376 | 374 | 377 | 377 | 377 | 381 | 381 | 382 | 382 | 382 | 382 | 382 | 382 | 382 | 382 | 382 | 382 | 382 | 382 | 382 | 382 | 382 | 378 | 364 | 364 | 364 | 364 | 369 | 178 | 377539 | 405243 | 443469 | 468466 | 469348 | 487520 | 504029 | 515264 | 524714 | 523951 | 531710 | 518534 | 518029 | 524249 | 528458 | 519382 | 515632 | 515436 | 514228 | 508873 | 475490 | 478461 | 476694 | 478409 | 496786 | 519051 | 557074 | 585568 | 629849 | 675321 | 705882 | 732942 | 786406 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Manche | 50 | 670 | 668 | 654 | 650 | 645 | 641 | 641 | 643 | 643 | 644 | 644 | 643 | 643 | 643 | 643 | 643 | 645 | 646 | 646 | 646 | 646 | 646 | 647 | 647 | 647 | 647 | 647 | 637 | 593 | 596 | 601 | 601 | 611 | 446 | 529069 | 581615 | 594406 | 591376 | 594319 | 597531 | 604252 | 600882 | 595202 | 591421 | 573674 | 544776 | 539910 | 526377 | 520865 | 513815 | 500052 | 490653 | 486739 | 475456 | 424873 | 430714 | 432814 | 437865 | 434833 | 446261 | 446329 | 451419 | 451191 | 465502 | 479217 | 481059 | 502356 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Marne | 51 | 694 | 693 | 692 | 691 | 683 | 683 | 676 | 673 | 668 | 666 | 664 | 664 | 664 | 663 | 661 | 660 | 660 | 660 | 661 | 661 | 661 | 661 | 661 | 661 | 661 | 653 | 653 | 634 | 621 | 618 | 619 | 619 | 622 | 614 | 304609 | 310695 | 309108 | 339716 | 344905 | 355785 | 363819 | 371743 | 364290 | 373768 | 379312 | 381170 | 407476 | 421498 | 429217 | 434459 | 439331 | 432674 | 433963 | 436115 | 366492 | 397596 | 411998 | 410045 | 386717 | 414899 | 441995 | 485175 | 530399 | 543627 | 558217 | 563735 | 568193 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Haute-Marne | 52 | 551 | 552 | 549 | 550 | 549 | 551 | 551 | 550 | 550 | 550 | 550 | 550 | 550 | 550 | 550 | 550 | 550 | 550 | 550 | 550 | 550 | 550 | 550 | 550 | 549 | 549 | 547 | 543 | 394 | 395 | 424 | 432 | 437 | 425 | 226261 | 237494 | 232921 | 251094 | 254978 | 256932 | 261459 | 267743 | 255959 | 257579 | 258278 | 250413 | 252280 | 254722 | 247611 | 243322 | 231898 | 226367 | 221561 | 214621 | 198777 | 195273 | 189726 | 188429 | 181792 | 197163 | 208447 | 214340 | 212314 | 210670 | 204067 | 194873 | 185214 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Mayenne | 53 | 285 | 285 | 281 | 280 | 275 | 275 | 274 | 274 | 274 | 274 | 274 | 274 | 276 | 276 | 276 | 276 | 276 | 276 | 276 | 276 | 276 | 276 | 276 | 276 | 276 | 276 | 276 | 275 | 262 | 262 | 261 | 261 | 262 | 241 | 301968 | 328337 | 339973 | 353937 | 361764 | 361392 | 368439 | 374566 | 373841 | 375163 | 367855 | 350637 | 351933 | 344881 | 340063 | 332387 | 321187 | 313103 | 305457 | 297732 | 262447 | 259934 | 254479 | 251348 | 256317 | 251522 | 250030 | 252762 | 261789 | 271784 | 278037 | 285338 | 308273 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Meurthe-et-Moselle | 54 | 630 | 626 | 582 | 582 | 590 | 594 | 596 | 596 | 596 | 597 | 597 | 597 | 597 | 598 | 597 | 597 | 597 | 599 | 599 | 601 | 601 | 601 | 601 | 601 | 600 | 600 | 600 | 600 | 588 | 588 | 594 | 594 | 594 | 591 | 280699 | 302838 | 310778 | 277520 | 348728 | 353769 | 303027 | 306157 | 304479 | 366949 | 58644 | 365363 | 404849 | 419514 | 431946 | 444389 | 466654 | 484934 | 517716 | 564932 | 503989 | 552261 | 592803 | 576219 | 528960 | 604190 | 678247 | 705554 | 722693 | 716964 | 711943 | 713779 | 731019 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Meuse | 55 | 590 | 590 | 588 | 588 | 587 | 587 | 587 | 587 | 587 | 586 | 586 | 586 | 585 | 585 | 585 | 585 | 585 | 585 | 585 | 585 | 585 | 585 | 585 | 585 | 585 | 585 | 584 | 581 | 481 | 486 | 498 | 498 | 502 | 500 | 269536 | 284944 | 292076 | 314304 | 317697 | 326153 | 325515 | 328161 | 305472 | 304898 | 301135 | 284499 | 293814 | 289632 | 291718 | 292014 | 290147 | 283268 | 280012 | 277753 | 207130 | 217957 | 215648 | 216756 | 188631 | 206938 | 215816 | 209372 | 203799 | 199983 | 196223 | 192198 | 194101 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Morbihan | 56 | 227 | 226 | 225 | 226 | 227 | 231 | 231 | 233 | 233 | 237 | 243 | 248 | 249 | 249 | 250 | 253 | 254 | 255 | 256 | 257 | 258 | 260 | 260 | 261 | 261 | 262 | 263 | 263 | 261 | 261 | 261 | 261 | 261 | 250 | 400825 | 403011 | 415809 | 432333 | 447886 | 447588 | 471500 | 477097 | 474344 | 486405 | 500425 | 490294 | 506573 | 521614 | 535256 | 544470 | 552028 | 563468 | 573152 | 578400 | 546047 | 543175 | 537528 | 542248 | 506884 | 520978 | 530833 | 540474 | 563588 | 590889 | 619838 | 643873 | 716182 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Moselle | 57 | 913 | 917 | 706 | 702 | 730 | 736 | 739 | 741 | 741 | 747 | 747 | 750 | 752 | 754 | 751 | 751 | 759 | 759 | 759 | 758 | 757 | 763 | 764 | 764 | 763 | 763 | 758 | 752 | 718 | 720 | 727 | 730 | 730 | 725 | 369830 | 410614 | 444539 | 128435 | 502902 | 496996 | 133365 | 130944 | 120152 | 508390 | 393753 | 490459 | 480250 | 492713 | 489729 | 510392 | 525140 | 565429 | 615700 | 609509 | 589120 | 633461 | 693408 | 696246 | 622145 | 769388 | 919412 | 971314 | 1006373 | 1007189 | 1011302 | 1023447 | 1044876 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Nièvre | 58 | 331 | 331 | 329 | 323 | 317 | 316 | 316 | 316 | 317 | 314 | 312 | 313 | 313 | 313 | 313 | 313 | 313 | 313 | 313 | 313 | 313 | 313 | 313 | 313 | 313 | 313 | 313 | 313 | 312 | 312 | 312 | 312 | 311 | 308 | 231937 | 241473 | 257990 | 283062 | 297470 | 305286 | 321853 | 326972 | 326134 | 333026 | 343083 | 340361 | 346822 | 347755 | 347645 | 343581 | 333899 | 323783 | 313972 | 299312 | 270148 | 260502 | 255195 | 249673 | 248559 | 240078 | 245921 | 247702 | 245212 | 239635 | 233278 | 225198 | 219586 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Nord | 59 | 667 | 667 | 665 | 660 | 660 | 662 | 663 | 663 | 664 | 661 | 661 | 662 | 663 | 664 | 666 | 667 | 668 | 668 | 668 | 668 | 669 | 669 | 670 | 670 | 666 | 665 | 665 | 663 | 654 | 652 | 652 | 653 | 651 | 649 | 763460 | 837992 | 905699 | 990332 | 1026864 | 1085825 | 1133493 | 1158810 | 1212922 | 1303901 | 1392613 | 1448178 | 1520183 | 1603774 | 1670668 | 1736795 | 1812312 | 1867408 | 1896260 | 1962115 | 1788193 | 1969435 | 2029736 | 2022436 | 1917704 | 2096805 | 2293388 | 2418166 | 2511478 | 2520526 | 2531855 | 2555020 | 2571940 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Oise | 60 | 731 | 730 | 730 | 630 | 698 | 699 | 700 | 700 | 700 | 700 | 700 | 701 | 701 | 701 | 701 | 701 | 701 | 701 | 701 | 701 | 701 | 701 | 702 | 702 | 698 | 698 | 697 | 696 | 693 | 693 | 693 | 693 | 696 | 682 | 360251 | 383507 | 375816 | 397810 | 398792 | 399592 | 406331 | 403281 | 396351 | 401828 | 395702 | 390832 | 401618 | 404555 | 403086 | 401835 | 404511 | 407808 | 410050 | 411028 | 387760 | 405971 | 407432 | 402569 | 396724 | 435308 | 481289 | 540988 | 606320 | 661781 | 725603 | 766441 | 804810 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Orne | 61 | 623 | 624 | 595 | 537 | 532 | 512 | 511 | 511 | 511 | 511 | 510 | 510 | 511 | 511 | 512 | 512 | 512 | 512 | 512 | 512 | 513 | 513 | 513 | 513 | 513 | 513 | 511 | 507 | 507 | 507 | 507 | 507 | 505 | 385 | 401026 | 429506 | 427048 | 128871 | 443523 | 441912 | 442107 | 439884 | 430127 | 423350 | 414618 | 398250 | 392526 | 376126 | 367248 | 354387 | 339162 | 326952 | 315993 | 307433 | 274814 | 277637 | 273717 | 269331 | 273181 | 274862 | 280526 | 288503 | 293523 | 295472 | 293204 | 292337 | 292210 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Pas-de-Calais | 62 | 931 | 930 | 923 | 905 | 905 | 905 | 905 | 905 | 904 | 905 | 905 | 906 | 906 | 906 | 905 | 905 | 905 | 906 | 906 | 906 | 907 | 907 | 907 | 907 | 908 | 910 | 910 | 909 | 898 | 898 | 897 | 894 | 896 | 891 | 537136 | 572604 | 611648 | 656674 | 666656 | 686459 | 697167 | 696980 | 699302 | 724088 | 749494 | 760759 | 794518 | 820344 | 854787 | 875494 | 907370 | 956466 | 1013492 | 1069355 | 990704 | 1172723 | 1205975 | 1180196 | 1169196 | 1277467 | 1366927 | 1397817 | 1402295 | 1412413 | 1433203 | 1441568 | 1461354 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Puy-de-Dôme | 63 | 437 | 438 | 438 | 441 | 443 | 444 | 443 | 443 | 443 | 443 | 444 | 455 | 465 | 467 | 469 | 470 | 470 | 470 | 471 | 472 | 472 | 472 | 472 | 473 | 473 | 473 | 473 | 473 | 470 | 470 | 470 | 470 | 470 | 464 | 507130 | 542834 | 553404 | 573096 | 589029 | 591458 | 600073 | 596295 | 590254 | 576141 | 569642 | 565569 | 570207 | 566064 | 570964 | 564266 | 555078 | 544194 | 535419 | 525916 | 490560 | 515399 | 500590 | 486103 | 478876 | 481380 | 508928 | 547743 | 580033 | 594365 | 598213 | 604266 | 629416 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Pyrénées-Atlantiques | 64 | 657 | 588 | 654 | 631 | 631 | 562 | 561 | 561 | 559 | 558 | 557 | 558 | 558 | 558 | 558 | 559 | 559 | 559 | 559 | 559 | 559 | 560 | 560 | 560 | 560 | 560 | 560 | 559 | 537 | 540 | 543 | 545 | 547 | 546 | 360336 | 388448 | 404284 | 434720 | 452582 | 458935 | 465487 | 453602 | 451755 | 436628 | 435497 | 426892 | 431525 | 434366 | 432999 | 425027 | 423572 | 426347 | 425815 | 433318 | 402981 | 414556 | 422719 | 413411 | 415797 | 420009 | 466038 | 508734 | 534748 | 555696 | 578514 | 600018 | 650356 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Hautes-Pyrénées | 65 | 499 | 498 | 495 | 491 | 489 | 484 | 488 | 480 | 479 | 479 | 480 | 480 | 480 | 480 | 480 | 480 | 480 | 480 | 480 | 480 | 480 | 480 | 480 | 480 | 481 | 481 | 481 | 479 | 474 | 474 | 474 | 474 | 474 | 469 | 178611 | 198763 | 212088 | 233031 | 244170 | 244196 | 251285 | 250934 | 245856 | 239805 | 239120 | 128795 | 238037 | 236474 | 234825 | 225861 | 218973 | 215546 | 209397 | 206095 | 185760 | 187875 | 189993 | 188604 | 201954 | 203544 | 211433 | 225730 | 227222 | 227922 | 224759 | 222368 | 229670 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Pyrénées-Orientales | 66 | 248 | 248 | 248 | 226 | 226 | 227 | 227 | 228 | 229 | 230 | 231 | 231 | 231 | 231 | 231 | 232 | 232 | 232 | 232 | 232 | 232 | 233 | 234 | 234 | 233 | 233 | 233 | 232 | 221 | 221 | 226 | 226 | 227 | 227 | 110732 | 126626 | 143054 | 157052 | 164304 | 170679 | 180089 | 181941 | 183037 | 181681 | 189431 | 191745 | 197930 | 208855 | 211187 | 210125 | 208387 | 212121 | 213171 | 212986 | 217503 | 229979 | 238647 | 233347 | 228776 | 230287 | 251231 | 281976 | 299506 | 334557 | 363796 | 392803 | 445890 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Bas-Rhin | 67 | 562 | 562 | 559 | 561 | 561 | 561 | 560 | 561 | 561 | 560 | 559 | 560 | 560 | 560 | 560 | 561 | 561 | 561 | 561 | 561 | 561 | 561 | 562 | 562 | 561 | 561 | 561 | 561 | 519 | 520 | 522 | 526 | 528 | 515 | 410960 | 454579 | 518492 | 558977 | 581943 | 580375 | 600178 | 607115 | 583010 | 598193 | 608879 | 600406 | 598179 | 612015 | 612405 | 621505 | 638624 | 659432 | 686695 | 700663 | 651686 | 670985 | 688242 | 711830 | 673281 | 707934 | 770150 | 827367 | 882121 | 915676 | 953053 | 1026120 | 1094439 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Haut-Rhin | 68 | 380 | 383 | 383 | 383 | 383 | 384 | 384 | 384 | 384 | 384 | 384 | 386 | 386 | 386 | 386 | 386 | 386 | 386 | 386 | 386 | 385 | 385 | 386 | 386 | 386 | 384 | 384 | 384 | 378 | 377 | 377 | 377 | 377 | 366 | 266001 | 296429 | 325481 | 375807 | 394535 | 409102 | 431182 | 436744 | 445436 | 459454 | 473314 | 459298 | 453850 | 461942 | 462549 | 471609 | 477477 | 495210 | 512080 | 517865 | 468943 | 490654 | 516726 | 507551 | 471705 | 509647 | 547920 | 585019 | 635209 | 650372 | 671319 | 708025 | 748614 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Rhône | 69 | 292 | 292 | 285 | 285 | 285 | 286 | 288 | 290 | 285 | 286 | 287 | 292 | 292 | 292 | 294 | 296 | 296 | 297 | 297 | 298 | 298 | 298 | 299 | 299 | 299 | 299 | 299 | 297 | 293 | 293 | 293 | 293 | 293 | 267 | 324474 | 368504 | 422498 | 484879 | 517305 | 535399 | 579421 | 611131 | 656223 | 699307 | 714986 | 706270 | 738024 | 772795 | 806248 | 837524 | 870396 | 874855 | 890074 | 947029 | 986202 | 1029098 | 1089568 | 1070026 | 959052 | 1015681 | 1181597 | 1326383 | 1429647 | 1445208 | 1508966 | 1578869 | 1708671 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Haute-Saône | 70 | 641 | 630 | 584 | 583 | 582 | 582 | 584 | 584 | 584 | 584 | 584 | 584 | 584 | 584 | 584 | 584 | 584 | 584 | 584 | 584 | 584 | 584 | 584 | 584 | 584 | 584 | 584 | 581 | 544 | 545 | 546 | 545 | 546 | 540 | 288961 | 301048 | 308400 | 343464 | 343993 | 348036 | 345452 | 348124 | 312950 | 317724 | 318228 | 303604 | 304524 | 296361 | 291401 | 281300 | 273296 | 266991 | 264241 | 257945 | 228618 | 226567 | 219480 | 213064 | 202830 | 209529 | 208639 | 214385 | 222254 | 231962 | 229650 | 229732 | 239278 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Saône-et-Loire | 71 | 609 | 607 | 602 | 576 | 575 | 575 | 574 | 574 | 576 | 577 | 577 | 580 | 589 | 589 | 589 | 590 | 589 | 589 | 589 | 589 | 589 | 589 | 589 | 590 | 590 | 590 | 589 | 586 | 571 | 573 | 574 | 573 | 573 | 565 | 452656 | 471457 | 498687 | 516696 | 536555 | 551587 | 564514 | 575154 | 571735 | 580869 | 598590 | 595714 | 614309 | 625589 | 625885 | 618523 | 621237 | 620360 | 613177 | 604445 | 554816 | 549240 | 538741 | 525676 | 506750 | 511182 | 535772 | 550362 | 569810 | 571852 | 559413 | 544893 | 554720 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Sarthe | 72 | 413 | 413 | 393 | 393 | 394 | 391 | 391 | 391 | 389 | 389 | 386 | 386 | 386 | 387 | 385 | 386 | 386 | 386 | 386 | 386 | 386 | 386 | 386 | 386 | 386 | 386 | 386 | 376 | 376 | 375 | 375 | 375 | 375 | 354 | 388046 | 410380 | 428065 | 457362 | 466888 | 470524 | 474876 | 473071 | 467193 | 466155 | 463619 | 446603 | 446239 | 438917 | 436111 | 429737 | 425077 | 422699 | 421470 | 419370 | 389235 | 387482 | 384619 | 388519 | 412214 | 420393 | 443019 | 461839 | 490385 | 504768 | 513654 | 529851 | 561050 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Savoie | 73 | 326 | 326 | 326 | 326 | 325 | 325 | 325 | 325 | 325 | 325 | 326 | 327 | 327 | 328 | 328 | 328 | 329 | 329 | 330 | 330 | 330 | 330 | 330 | 330 | 330 | 330 | 328 | 324 | 304 | 304 | 305 | 305 | 305 | 273 | 223406 | 242649 | 264108 | 0 | 292412 | 0 | 280973 | 0 | 275725 | 274864 | 271114 | 268030 | 268361 | 266438 | 267428 | 263297 | 259790 | 254781 | 253297 | 247890 | 225234 | 231210 | 235544 | 239010 | 236119 | 252192 | 266678 | 288921 | 305118 | 323675 | 348261 | 373258 | 411007 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Haute-Savoie | 74 | 309 | 309 | 303 | 302 | 306 | 316 | 306 | 273 | 306 | 309 | 310 | 313 | 314 | 314 | 314 | 314 | 314 | 314 | 314 | 314 | 315 | 315 | 315 | 315 | 315 | 315 | 314 | 307 | 291 | 292 | 292 | 293 | 293 | 278 | 194425 | 202661 | 233632 | 0 | 269601 | 0 | 283847 | 0 | 265529 | 265447 | 273536 | 273112 | 273801 | 274087 | 275018 | 268267 | 265872 | 263803 | 260617 | 255137 | 235568 | 245317 | 252794 | 259961 | 270564 | 293854 | 329230 | 378550 | 447795 | 494505 | 568286 | 631679 | 724795 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Paris | 75 | 10 | 10 | 10 | 12 | 12 | 12 | 12 | 12 | 12 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 559209 | 662015 | 677865 | 834655 | 981846 | 1032732 | 1188377 | 1233635 | 1467530 | 1696141 | 1825274 | 1851792 | 1988806 | 2269023 | 2344550 | 2447957 | 2536834 | 2714068 | 2763393 | 2888110 | 2906472 | 2871429 | 2891020 | 2829746 | 2725374 | 2850189 | 2790091 | 2590771 | 2299830 | 2176243 | 2152423 | 2125246 | 2262949 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Seine-Maritime | 76 | 989 | 989 | 934 | 762 | 760 | 759 | 759 | 760 | 760 | 759 | 756 | 759 | 759 | 759 | 759 | 759 | 760 | 760 | 760 | 760 | 759 | 759 | 759 | 759 | 759 | 758 | 757 | 753 | 745 | 745 | 745 | 745 | 745 | 707 | 631018 | 642720 | 637450 | 694142 | 712020 | 730463 | 750152 | 763999 | 760970 | 789145 | 769497 | 816066 | 798414 | 814068 | 833386 | 839876 | 837824 | 853883 | 863879 | 877383 | 880671 | 885299 | 905278 | 915628 | 846131 | 941684 | 1035843 | 1113977 | 1172743 | 1193108 | 1223429 | 1239138 | 1249907 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Seine-et-Marne | 77 | 561 | 560 | 556 | 556 | 555 | 529 | 527 | 527 | 527 | 527 | 528 | 529 | 530 | 530 | 530 | 530 | 530 | 530 | 533 | 533 | 534 | 534 | 534 | 534 | 534 | 533 | 533 | 531 | 514 | 514 | 514 | 514 | 514 | 507 | 299140 | 304068 | 302907 | 323394 | 326174 | 333088 | 340363 | 344840 | 341553 | 352408 | 354267 | 341661 | 347323 | 348991 | 355136 | 356709 | 359034 | 358325 | 361939 | 363561 | 349234 | 380017 | 406108 | 409311 | 407137 | 453438 | 524486 | 604342 | 755762 | 887112 | 1078166 | 1193767 | 1313414 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Yvelines | 78 | 267 | 267 | 265 | 265 | 265 | 265 | 265 | 265 | 265 | 265 | 264 | 265 | 265 | 265 | 266 | 266 | 266 | 266 | 266 | 266 | 266 | 266 | 265 | 265 | 265 | 265 | 263 | 262 | 262 | 262 | 262 | 262 | 262 | 259 | 182493 | 186038 | 185312 | 190656 | 191668 | 203797 | 204803 | 201955 | 207244 | 218368 | 222880 | 251157 | 235511 | 236471 | 247910 | 250552 | 263462 | 270228 | 277753 | 297562 | 321240 | 367267 | 408282 | 427078 | 431616 | 519176 | 687827 | 854382 | 1082255 | 1196111 | 1307150 | 1354304 | 1407560 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Deux-Sèvres | 79 | 364 | 364 | 364 | 355 | 354 | 354 | 354 | 354 | 354 | 354 | 355 | 355 | 355 | 355 | 354 | 353 | 353 | 353 | 355 | 355 | 356 | 356 | 356 | 356 | 356 | 356 | 356 | 351 | 302 | 303 | 307 | 308 | 305 | 256 | 240991 | 252727 | 279174 | 294289 | 303478 | 309598 | 320059 | 322999 | 327140 | 327583 | 331699 | 330550 | 335884 | 349345 | 352988 | 353489 | 345932 | 341696 | 338728 | 336903 | 309356 | 309100 | 308138 | 308122 | 312038 | 312032 | 320316 | 325603 | 335829 | 342812 | 345965 | 344392 | 366339 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Somme | 80 | 845 | 844 | 841 | 833 | 832 | 830 | 829 | 830 | 830 | 830 | 831 | 831 | 833 | 834 | 834 | 834 | 834 | 834 | 834 | 834 | 834 | 834 | 833 | 833 | 833 | 833 | 833 | 817 | 783 | 783 | 783 | 783 | 787 | 777 | 457465 | 493791 | 507870 | 541477 | 550859 | 558213 | 568446 | 569082 | 565447 | 571058 | 571042 | 555594 | 555263 | 549515 | 547721 | 545365 | 542158 | 536773 | 531541 | 518961 | 451887 | 473105 | 465842 | 466750 | 440717 | 463519 | 487524 | 511491 | 538462 | 544570 | 547825 | 555551 | 572024 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Tarn | 81 | 365 | 365 | 362 | 326 | 323 | 319 | 315 | 315 | 316 | 316 | 316 | 317 | 318 | 318 | 318 | 320 | 320 | 321 | 322 | 323 | 323 | 323 | 324 | 324 | 325 | 326 | 326 | 326 | 324 | 324 | 324 | 324 | 324 | 315 | 271980 | 295885 | 290467 | 334834 | 346614 | 351656 | 360679 | 363073 | 354832 | 353633 | 355513 | 352718 | 359232 | 359223 | 358757 | 347739 | 339827 | 332093 | 330533 | 324090 | 295588 | 301717 | 302994 | 297871 | 298117 | 308197 | 319560 | 332011 | 338024 | 339345 | 342723 | 343402 | 377157 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Tarn-et-Garonne | 82 | 249 | 213 | 198 | 191 | 192 | 192 | 192 | 192 | 193 | 193 | 194 | 194 | 194 | 194 | 194 | 194 | 194 | 195 | 195 | 195 | 195 | 195 | 195 | 195 | 195 | 195 | 195 | 195 | 195 | 195 | 195 | 195 | 198 | 198 | 219530 | 230524 | 238183 | 242250 | 242688 | 239313 | 242307 | 237810 | 234842 | 232551 | 228800 | 221610 | 221364 | 217056 | 214046 | 206596 | 200390 | 195669 | 188553 | 182537 | 159559 | 164191 | 164259 | 164629 | 167664 | 172379 | 175847 | 183572 | 183314 | 190485 | 200220 | 206034 | 240663 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Var | 83 | 148 | 147 | 147 | 149 | 147 | 143 | 142 | 142 | 143 | 143 | 144 | 145 | 145 | 145 | 145 | 145 | 147 | 148 | 148 | 148 | 149 | 149 | 150 | 151 | 151 | 153 | 154 | 154 | 153 | 153 | 153 | 153 | 153 | 153 | 217447 | 227215 | 243759 | 257953 | 256685 | 261769 | 284732 | 290240 | 306225 | 315284 | 308500 | 299534 | 295763 | 288577 | 283689 | 288336 | 309191 | 326684 | 324638 | 330755 | 322945 | 347932 | 377104 | 398662 | 370688 | 413012 | 469557 | 555926 | 626093 | 708331 | 815449 | 898441 | 1007303 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Vaucluse | 84 | 150 | 150 | 148 | 148 | 148 | 148 | 149 | 149 | 149 | 149 | 149 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | 151 | 151 | 151 | 151 | 151 | 151 | 151 | 151 | 151 | 151 | 151 | 151 | 151 | 191421 | 205832 | 224431 | 239113 | 246071 | 251080 | 259154 | 264618 | 268994 | 268237 | 266091 | 263451 | 255703 | 244149 | 241787 | 235411 | 236313 | 236949 | 239178 | 238656 | 219602 | 230549 | 241689 | 245508 | 249838 | 268318 | 303536 | 353966 | 390446 | 427343 | 467075 | 499685 | 540065 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Vendée | 85 | 315 | 321 | 319 | 297 | 294 | 294 | 294 | 296 | 297 | 298 | 298 | 298 | 299 | 299 | 300 | 301 | 303 | 303 | 304 | 304 | 306 | 306 | 306 | 306 | 306 | 307 | 307 | 296 | 281 | 282 | 283 | 283 | 292 | 259 | 243420 | 268646 | 316587 | 330350 | 341011 | 352222 | 376184 | 383734 | 389683 | 395695 | 404473 | 401446 | 411740 | 421633 | 434808 | 442355 | 441735 | 441311 | 442777 | 438520 | 397292 | 395602 | 390396 | 389211 | 393784 | 395641 | 408928 | 421250 | 450641 | 483027 | 509356 | 539664 | 653359 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Vienne | 86 | 343 | 345 | 306 | 300 | 300 | 299 | 298 | 296 | 296 | 296 | 296 | 300 | 300 | 300 | 300 | 300 | 300 | 300 | 300 | 300 | 300 | 300 | 300 | 300 | 298 | 298 | 298 | 297 | 274 | 281 | 281 | 281 | 281 | 266 | 240920 | 253048 | 260636 | 282631 | 288002 | 291016 | 308391 | 317305 | 322585 | 322028 | 324527 | 320594 | 330916 | 340295 | 342785 | 344355 | 338114 | 336343 | 333622 | 332277 | 306248 | 310474 | 303072 | 306820 | 313932 | 319208 | 331619 | 340256 | 357366 | 371428 | 379977 | 399024 | 426066 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Haute-Vienne | 87 | 211 | 195 | 221 | 201 | 199 | 199 | 199 | 199 | 199 | 200 | 200 | 202 | 203 | 203 | 203 | 203 | 203 | 203 | 205 | 205 | 205 | 205 | 206 | 206 | 206 | 206 | 205 | 205 | 201 | 201 | 201 | 201 | 201 | 195 | 245145 | 243195 | 272330 | 285033 | 292984 | 292848 | 314513 | 319197 | 319788 | 320075 | 326037 | 322500 | 336061 | 349332 | 363182 | 372878 | 375724 | 381753 | 385732 | 384736 | 350235 | 351311 | 335873 | 333589 | 336313 | 324429 | 332514 | 341589 | 352149 | 355737 | 353593 | 353893 | 374849 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Vosges | 88 | 532 | 532 | 531 | 532 | 531 | 530 | 528 | 528 | 530 | 530 | 530 | 530 | 531 | 530 | 530 | 530 | 531 | 531 | 530 | 530 | 531 | 531 | 531 | 532 | 531 | 531 | 531 | 522 | 517 | 516 | 516 | 515 | 515 | 507 | 295475 | 319681 | 341373 | 378824 | 390091 | 396737 | 406876 | 0 | 385650 | 394644 | 396868 | 154360 | 407082 | 406862 | 413707 | 410196 | 421412 | 421104 | 429812 | 433914 | 383684 | 382100 | 377980 | 376926 | 342315 | 372523 | 380676 | 388201 | 397957 | 395769 | 386258 | 380952 | 380192 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Yonne | 89 | 481 | 481 | 481 | 481 | 481 | 482 | 482 | 482 | 482 | 483 | 485 | 485 | 485 | 485 | 485 | 486 | 486 | 486 | 486 | 486 | 486 | 486 | 486 | 486 | 485 | 484 | 484 | 482 | 439 | 450 | 451 | 453 | 455 | 423 | 323727 | 325994 | 333905 | 353088 | 355437 | 361677 | 373624 | 379785 | 368131 | 370402 | 372131 | 362855 | 359070 | 357029 | 355364 | 344688 | 332656 | 321062 | 315179 | 303889 | 273118 | 277230 | 275755 | 271685 | 266014 | 266410 | 269826 | 283376 | 299851 | 311019 | 323096 | 333221 | 343377 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Territoire de Belfort | 90 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 99 | 101 | 101 | 102 | 102 | 101 | 37772 | 40511 | 44681 | 50785 | 52275 | 53215 | 56026 | 57345 | 54011 | 56336 | 56915 | 56781 | 68600 | 74244 | 79758 | 83670 | 88047 | 92304 | 95421 | 101386 | 94338 | 96594 | 99403 | 99497 | 86648 | 99427 | 109371 | 118450 | 128125 | 131999 | 134097 | 137408 | 142461 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Essonne | 91 | 199 | 199 | 197 | 197 | 197 | 196 | 196 | 196 | 196 | 196 | 196 | 196 | 196 | 196 | 197 | 198 | 198 | 198 | 198 | 198 | 198 | 198 | 198 | 198 | 198 | 197 | 196 | 196 | 196 | 196 | 196 | 196 | 196 | 194 | 110593 | 113696 | 110431 | 118237 | 118680 | 120529 | 122496 | 123601 | 123295 | 127803 | 130485 | 131548 | 135919 | 140035 | 147693 | 151734 | 159506 | 164625 | 169659 | 177216 | 187193 | 228021 | 271102 | 286903 | 294878 | 350992 | 478862 | 673485 | 923063 | 988000 | 1084824 | 1134238 | 1208004 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Hauts-de-Seine | 92 | 31 | 31 | 31 | 31 | 31 | 31 | 31 | 31 | 31 | 31 | 32 | 32 | 32 | 32 | 33 | 33 | 34 | 34 | 34 | 35 | 35 | 35 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36460 | 38665 | 41979 | 57437 | 66364 | 76306 | 88476 | 96625 | 126392 | 139197 | 175018 | 193308 | 208482 | 254928 | 293386 | 332076 | 386737 | 467391 | 529496 | 614862 | 724261 | 820716 | 949231 | 1019627 | 992859 | 1118020 | 1381805 | 1461619 | 1438930 | 1387039 | 1391658 | 1428881 | 1561745 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Seine-Saint-Denis | 93 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 36 | 38 | 38 | 38 | 38 | 38 | 39 | 39 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 40 | 28901 | 29370 | 29438 | 38391 | 39494 | 44154 | 45023 | 48067 | 56237 | 78236 | 100317 | 120954 | 138099 | 180412 | 207901 | 230992 | 262735 | 307329 | 349545 | 411443 | 504956 | 635806 | 769315 | 776395 | 729361 | 845231 | 1083724 | 1249606 | 1322127 | 1324301 | 1381197 | 1382861 | 1515983 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Val-de-Marne | 94 | 42 | 42 | 42 | 42 | 42 | 42 | 42 | 42 | 42 | 42 | 42 | 42 | 42 | 42 | 43 | 44 | 45 | 46 | 46 | 46 | 46 | 47 | 47 | 47 | 47 | 47 | 47 | 47 | 47 | 47 | 47 | 47 | 47 | 47 | 33471 | 30880 | 31801 | 44956 | 53581 | 59067 | 68014 | 70085 | 90810 | 90916 | 106836 | 120523 | 136612 | 161619 | 194938 | 213718 | 246363 | 288891 | 330320 | 386085 | 462212 | 559882 | 657334 | 685297 | 672037 | 767543 | 974962 | 1121319 | 1215713 | 1193655 | 1215538 | 1227250 | 1318537 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Val-d’Oise | 95 | 188 | 186 | 186 | 187 | 186 | 183 | 183 | 184 | 184 | 183 | 184 | 185 | 185 | 185 | 185 | 185 | 185 | 185 | 185 | 185 | 185 | 186 | 186 | 186 | 186 | 187 | 185 | 185 | 185 | 185 | 185 | 185 | 185 | 184 | 102252 | 103387 | 101148 | 107645 | 105530 | 106368 | 107503 | 107008 | 108751 | 116265 | 122975 | 122052 | 129655 | 134859 | 143028 | 143387 | 154118 | 164962 | 178444 | 196599 | 227220 | 283256 | 353374 | 350487 | 344687 | 412658 | 548429 | 693269 | 840885 | 920598 | 1049598 | 1105464 | 1168892 | NA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
rm(evol_deps_affichage, nbr_col)
cassini_reduite <- cassini
nom_dep <- "France entière"
evol_nbr_com_reduit <- data.frame() # Création d'un objet pour récupérer les résultats de la base réduite
# Boucle pour exploiter les données date par date
for (label in labels_data_pop) {
annee <- substr(label, start =5, stop = nchar(label)-5) # On repère le n° de l'année en segmentant le label
sous_tableau_reduit <- subset(cassini_reduite, cassini_reduite[, label] == "pop" | cassini_reduite[, label] == "lac." | cassini_reduite[, label] == "abs.") # On crée un sous-tableau comptant uniquement les communes dont la population nous intéresse, à l'année donnée
# sous_tableau_reduit <- subset(cassini_reduite, cassini_reduite[, label] == "pop") # Juste avec les populations connues
nbr_com_reduit <- nrow(sous_tableau_reduit) # On compte le nombre de communes
pop_annee_dep <- sum(as.numeric(sous_tableau_reduit[, paste0("pop_", annee, "_val")]), na.rm=TRUE)
i_reduit <- c(annee, nbr_com_reduit, pop_annee_dep) # On compile les résultats totaux
evol_nbr_com_reduit <- rbind(evol_nbr_com_reduit, i_reduit, stringsAsFactors = FALSE)
}
# On traite à la main les deux années 2011 et 2021
# Pour 2011, on fait la liste des CODGEO unique de 2021 et on multiplie par leur nombre de communes fusionnantes (donne le nombre de communes en 2011)
# Pas très propre mais pas l'énergie de faire mieux là...
CODGEO_2021_reduit <- as.data.frame(unique(cassini_reduite$commune_mars_2021))
colnames(CODGEO_2021_reduit) <- "CODGEO_new"
# On joint pour avoir le nombre de communes fusionnantes
CODGEO_2021_reduit <- merge(df_new[c("CODGEO_new", "NbrComFus", "P09_POP")], CODGEO_2021_reduit, by = "CODGEO_new", all.y = TRUE)
# Pour les communes non fusionnantes, on indique qu'il y en a une
CODGEO_2021_reduit$NbrComFus[is.na(CODGEO_2021_reduit$NbrComFus)] <- 1
i_2011_reduit <- c(2011, sum(CODGEO_2021_reduit$NbrComFus), sum(CODGEO_2021_reduit$P09_POP))
evol_nbr_com_reduit <- rbind(evol_nbr_com_reduit, i_2011_reduit)
# Pour 2021, on liste simplement le nombre de CODGEO uniques de 2021 pour chacun des groupe
i_2021_reduit <- c(2021, length(unique(cassini_reduite$commune_mars_2021)), NA)
evol_nbr_com_reduit <- rbind(evol_nbr_com_reduit, i_2021_reduit)
colnames (evol_nbr_com_reduit) <- c("annees", "nbr_com", "population")
evol_nbr_com <- evol_nbr_com_reduit
# evol_nbr_com[c(1,2), 1] <- c(1795, 1800) # On modifie l'intitulé pour faciliter la représentation graphique
# Est désormais fait plus haut
# evol_nbr_com$annees[evol_nbr_com$annees == "an3"] <- 1795
# evol_nbr_com$annees[evol_nbr_com$annees == "an8"] <- 1800
evol_nbr_com[,1] <- as.numeric(evol_nbr_com[,1]) # On passe en numérique pour faciliter la représentation
evol_nbr_com[,2] <- as.numeric(evol_nbr_com[,2]) # Si on veut faire une seule colonne
evol_nbr_com[,3] <- as.numeric(evol_nbr_com[,3]) # Si on veut faire une seule colonne
# Calcul de l'évolution en valeur absolue du nombre de commune dans le département
evol_nbr_com$evol <- evol_nbr_com$nbr_com - lag(evol_nbr_com$nbr_com)
# Calcul du taux d'évolution
evol_nbr_com$tx_evol <- round(100 * (evol_nbr_com$nbr_com - lag(evol_nbr_com$nbr_com)) / lag(evol_nbr_com$nbr_com), 2)
# On compile les résultats du département en question
departement <- c(nom_dep, "", evol_nbr_com$nbr_com, evol_nbr_com$population, evol_nbr_com$evol, evol_nbr_com$tx_evol)
# On ajoute ces résultats dans le tableau global
evol_deps <- rbind (evol_deps, departement, stringsAsFactors = FALSE)
# ggplot(data=evol_nbr_com, aes(x=annees, y=nbr_com)) +
# geom_line() +
# scale_x_continuous (breaks = seq(1780, 2030, 20)) +
# labs(title="Évolution du nombre de communes en Aveyron", subtitle="1795-2021", x="", y = "", caption="Sources : cassini.ehess.fr, INSEE")
# Création d'un tableau en base 100 en 1800
nbr_col_select <- length(labels_data_pop)+2+2 # Indique la dernière colonne à sélectionner : nombre de recensements dans la base Cassini, + deux colonnes au début du tableau, + 2011 et 2021.
evol_deps[3:nbr_col_select] <- apply(evol_deps [, 3:nbr_col_select], 2, as.numeric)
evol_deps_100 <- evol_deps [, 1:nbr_col_select]
evol_deps_100[3:nbr_col_select] <- 100 * evol_deps_100[3:nbr_col_select] / evol_deps_100$`1800`
# On change le tableau de sens (inversion lignes/colonnes) pour faciliter l'exploitation
pr_graph <- as.data.frame(t(evol_deps_100))
# On met le nom des départements en nom de colonne
colnames(pr_graph) <- pr_graph[1,]
pr_graph <- pr_graph [3:nrow(pr_graph),]
# On met la date dans une colonne à part
pr_graph$Date <- row.names(pr_graph)
# Pour avoir un graphique complètement exploitable, on change la forme des données
pr_graph <- melt(pr_graph, id.vars = "Date")
pr_graph$Date <- as.numeric(pr_graph$Date)
pr_graph$value <- as.numeric(pr_graph$value)
ggplot(data=pr_graph, aes(x=Date, y = value)) +
geom_line(aes(color = variable)) +
scale_x_continuous (breaks = seq(1780, 2030, 20)) +
labs(title= "Communes par départements (base 100 = 1800)", subtitle="1800-2021", x="", y = "", caption="Sources : cassini.ehess.fr, INSEE")
Quelques départements connaissent des trajectoires assez hachées laissant penser à des problèmes de comptabilisation :
Côte-d’Or (21), qui perd presque 250 communes en 1836 (et les regagne ensuite) ;
Oise (60) avec une forte baisse en 1831.
Haute-Vienne (87) avec une forte baisse en 1820)
[Ci-dessous, remarques avant que la mention “abs.” soit prise en compte pour comptabiliser les communes] Pour certains départements, les fluctuations paraissent particulièrement brutales voire carrément incohérentes, par exemple lorsque d’un recensement sur l’autre on passe de plusieurs centaines de communes à… zéro.
Nécessité de regarder en détail les données des départements suivants :
Alpes-Maritimes (06) qui fait le yoyo ;
Charente (16) et la Loire-Atlantique qui n’ont aucune commune en 1836 mais stable avant et après ;
Côte-d’Or (21), qui perd presque 250 communes en 1836 (et les regagne ensuite) ;
Meurthe-et-Moselle (54) et Moselle (57) : évolutions très hachées ;
Orne (61) : n’a plus que 100 communes en 1831 et les regagne après ;
Savoie (73) et Haute-Savoie (74) : n’ont aucune commune en 1831, 1841 et 1851 (absence de transposition de recensements non français ?) ;
Vosges (88) : bizareries en 1851 (plus de communes) et 1872 (seulement une cinquantaine).
Si besoin d’une limite pour faire jouer seulement à partir d’ici en conservant le cache précédent :
knitr::opts_chunk$set(echo=TRUE, # Afficher ou non le code R dans le document
eval=TRUE, # Exécuter ou non le code R à la compilation
include=TRUE, # Inclure ou non le code R et ses résultats dans le document
# results “hide”/“asis”/“markup”/“hold” Type de résultats renvoyés par le bloc de code
warning=TRUE, # Afficher ou non les avertissements générés par le bloc
message=TRUE, # Afficher ou non les messages générés par le bloc
cache=FALSE) # Utiliser le cache pour accélerer les knits.
# Phases envisagées au départ par Nicolas Verdier :
# 1790-1837, 1838-1884, puis 1885-1970, puis 1970-2000, puis 2000-2023
# Phases retenues du fait des données par recensement :
bornes <- c("1800", "1836", "1886", "1968", "1999", "2021")
# Phases retenues pour mieux coller au graphique national :
# bornes <- c("1800", "1836", "1881", "1954", "1975", "2011", "2021")
# Phases retenues pour mieux coller au graphique national, un peu différentes :
# bornes <- c("1800", "1846", "1962", "1982", "2011", "2021")
# Phases d'une trentaine d'année (sauf la dernière) :
# bornes <- c("1800", "1831", "1861", "1891", "1921", "1954", "1982", "2011", "2021")
dates_phases <- c()
# n <- 2
for (n in 2:length(bornes)) {
date_ini <- bornes[n-1]
date_fin <- bornes[n]
date_phase <- paste0(date_ini, "-", date_fin)
dates_phases <- c(dates_phases, date_phase)
evol_deps$evol_abs <- evol_deps[, date_fin] - evol_deps[, date_ini]
colnames(evol_deps)[ncol(evol_deps)] <- paste0("evol_", date_phase)
evol_deps$tx_evol <- round(100 * (evol_deps[, date_fin] - evol_deps[, date_ini]) / evol_deps[, date_ini], 2)
colnames(evol_deps)[ncol(evol_deps)] <- paste0("tx_evol_", date_phase)
}
rm(date_ini, date_fin, date_phase)
## Archive des phases réalisées à la main
# Phases envisagées au départ par Nicolas Verdier :
# 1790-1837, 1838-1884, puis 1885-1970, puis 1970-2000, puis 2000-2023
# Phases retenues du fait des données par recensement :
# phases <- c("evol_1800_1836", "evol_1836_1886", "evol_1886_1968", "evol_1968_1999", "evol_1999_2021")
# evol_deps$evol_1800_1836 <- evol_deps$`1836` - evol_deps$`1800`
# evol_deps$evol_1836_1886 <- evol_deps$`1886` - evol_deps$`1836`
# evol_deps$evol_1886_1968 <- evol_deps$`1968` - evol_deps$`1886`
# evol_deps$evol_1968_1999 <- evol_deps$`1999` - evol_deps$`1968`
# evol_deps$evol_1999_2021 <- evol_deps$`2021` - evol_deps$`1999`
# evol_deps$tx_evol_1800_1836 <- round(100 * (evol_deps$`1836` - evol_deps$`1800`) / evol_deps$`1800`, 2)
# evol_deps$tx_evol_1836_1886 <- round(100 * (evol_deps$`1886` - evol_deps$`1836`) / evol_deps$`1836`, 2)
# evol_deps$tx_evol_1886_1968 <- round(100 * (evol_deps$`1968` - evol_deps$`1886`) / evol_deps$`1886`, 2)
# evol_deps$tx_evol_1968_1999 <- round(100 * (evol_deps$`1999` - evol_deps$`1968`) / evol_deps$`1968`, 2)
# evol_deps$tx_evol_1999_2021 <- round(100 * (evol_deps$`2021` - evol_deps$`1999`) / evol_deps$`1999`, 2)
# Autres phases envisagées
# phases <- c("evol_1800_1836", "evol_1836_1881", "evol_1881_1954", "evol_1954_1975", "evol_1975_2011", "evol_2011_2021")
# evol_deps$evol_1800_1836 <- evol_deps$`1836` - evol_deps$`1800`
# evol_deps$evol_1836_1881 <- evol_deps$`1881` - evol_deps$`1836`
# evol_deps$evol_1881_1954 <- evol_deps$`1954` - evol_deps$`1881`
# evol_deps$evol_1854_1975 <- evol_deps$`1975` - evol_deps$`1954`
# evol_deps$evol_1975_2011 <- evol_deps$`2011` - evol_deps$`1975`
# evol_deps$evol_2011_2021 <- evol_deps$`2021` - evol_deps$`2011`
# evol_deps$tx_evol_1800_1836 <- round(100 * (evol_deps$`1836` - evol_deps$`1800`) / evol_deps$`1800`, 2)
# evol_deps$tx_evol_1836_1881 <- round(100 * (evol_deps$`1881` - evol_deps$`1836`) / evol_deps$`1836`, 2)
# evol_deps$tx_evol_1881_1954 <- round(100 * (evol_deps$`1954` - evol_deps$`1881`) / evol_deps$`1886`, 2)
# evol_deps$tx_evol_1954_1975 <- round(100 * (evol_deps$`1975` - evol_deps$`1954`) / evol_deps$`1968`, 2)
# evol_deps$tx_evol_1975_2011 <- round(100 * (evol_deps$`2011` - evol_deps$`1975`) / evol_deps$`1968`, 2)
# evol_deps$tx_evol_2011_2021 <- round(100 * (evol_deps$`2021` - evol_deps$`2011`) / evol_deps$`1999`, 2)
# colnames(evol_deps)
date_phase <- dates_phases[3]
ShpDep_IdF <- subset (ShpDep, ShpDep$CODE_DEPT == "75" | ShpDep$CODE_DEPT == "77" | ShpDep$CODE_DEPT == "78" | ShpDep$CODE_DEPT == "91" | ShpDep$CODE_DEPT == "92" | ShpDep$CODE_DEPT == "93" | ShpDep$CODE_DEPT == "94" | ShpDep$CODE_DEPT == "95")
for (date_phase in dates_phases) {
# date_phase <- paste0(substr(phase, start = 6, stop = 9), "-", substr(phase, start = 11, stop = 14)) Quand on s'appuyait sur une liste indiquant "evol_XXXX-XXXX"
# On extrait les données à la phase voulue pour simplifier la cartographie
pr_carte <- evol_deps[, c("Département", "CODE_DEPT", paste0("evol_", date_phase), paste0("tx_evol_", date_phase))]
colnames(pr_carte) <- c("Département", "CODE_DEPT", "evol_abs", "tx_evol")
# Carte départementale présentant l'évolution du nombre de communes
# Si on veut exporter (remettre dev.off en fin de séquence)
# svg(paste0("figures/Evol nombre de communes par départements (", date_phases, ", taux).svg"))
plot(ShpDep, col = "grey", border = "white", axes = FALSE) # Fond de carte
# Carte choroplèthe en fonction de la superficie moyenne des communes dans le département
choroLayer(spdf = ShpDep, # SpatialPolygonsDataFrame
df = pr_carte, # data frame
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "tx_evol",
# Si on souhaite faire les groupes manuellement :
breaks = c(-60, -10, -5, 0, 5, 10, 30), # liste des seuils (hypothèses)
col = carto.pal(pal1 = "blue.pal", n1 = 3, pal2 = "red.pal", n2 = 3),
# Si on souhaite avoir des groupes par quantiles :
# col = carto.pal(pal1 = "sand.pal", n1 = 4), method = "quantile",
nclass = 6,
add=TRUE,
legend.pos = "topleft",
legend.title.txt = "Taux d'évolution du\nnombre de communes\nsur la période")
layoutLayer(title = paste0("Évolution du nombre de communes par départements (", date_phase, ")"), coltitle = "black",
sources = "Sources : INSEE, IGN, Cassini.", scale = NULL,
author = "G. Bideau", frame ="", col = NA)
# Ajout d'un carton pour la région parisienne
# Page claire pour aider sur la représentation graphique : https://sites.google.com/site/rgraphiques/realiser-des-graphiques-avec-le-logiciel-r/g%C3%A9rer-les-graphiques-combinaisons-forme-et-sauvegarde/combinaisons-graphiques
par(new = TRUE)
par(fig=c(0.6, 0.9, 0.05, 0.25)) # On indique où placer le carton
par(mar = c(0, 0, 0, 0)) # On réduit les marges au maximum
# par(mar = c(5.1, 4.1, 4.1, 2.1)) # Marges par défaut
plot(ShpDep_IdF, col = "grey", border = "white", axes = FALSE)
choroLayer(spdf = ShpDep_IdF, # SpatialPolygonsDataFrame
df = pr_carte, # data frame
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "tx_evol",
# Si on souhaite faire les groupes manuellement :
breaks = c(-60, -10, -5, 0, 5, 10, 30), # liste des seuils (hypothèses)
col = carto.pal(pal1 = "blue.pal", n1 = 3, pal2 = "red.pal", n2 = 3),
# Si on souhaite avoir des groupes par quantiles :
# col = carto.pal(pal1 = "sand.pal", n1 = 4), method = "quantile",
nclass = 6,
add=TRUE,
legend.pos = "n",
legend.title.txt = "Taux d'évolution du\nnombre de communes\nsur la période")
# dev.off()
par(fig=c(0, 1, 0, 1)) # On reprend les données initiales
par(mar = c(5.1, 4.1, 4.1, 2.1)) # Et les marges
# Carte départementale présentant l'évolution du nombre de communes en valeur absolue
# Création d'un champs adapté pour la cartographie
pr_carte$evol_abs_negatif <- 0 -pr_carte$evol_abs
pr_carte$evol_abs_negatif[pr_carte$evol_abs_negatif < 0] <- NA
# Si on veut exporter (remettre dev.off en fin de séquence)
# svg(paste0("figures/Evol nombre de communes par départements (", date_phases, ", valeurs absolues).svg"))
plot(ShpDep, col = "grey", border = "white", axes = FALSE) # Fond de carte
# Carte choroplèthe en fonction de la superficie moyenne des communes dans le département
choroLayer(spdf = ShpDep, # SpatialPolygonsDataFrame
df = pr_carte, # data frame
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "tx_evol",
# Si on souhaite faire les groupes manuellement :
breaks = c(-60, -10, -5, 0, 5, 10, 30), # liste des seuils (hypothèses)
col = carto.pal(pal1 = "blue.pal", n1 = 3, pal2 = "red.pal", n2 = 3),
# Si on souhaite avoir des groupes par quantiles :
# col = carto.pal(pal1 = "sand.pal", n1 = 4), method = "quantile",
nclass = 6,
add=TRUE,
legend.pos = "topleft",
legend.title.txt = "Taux d'évolution")
# On rajoute les cercles en fonction de l'évolution en valeur absolue
propSymbolsLayer(spdf = ShpDep,
df = pr_carte,
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "evol_abs_negatif",
inches = 0.2,
fixmax = 500,
# breakval = 0, # On précise une valeur tournant
symbols = "circle",
col = "blue",
# col2 = "red",
legend.pos = "left",
legend.title.txt = "\n\n\n\n\n\nNombre de communes\nsupprimées",
legend.style = "c",
legend.frame = FALSE,
add = TRUE)
layoutLayer(title = paste0("Évolution du nombre de communes par départements (", date_phase, ")"), coltitle = "black",
sources = "Sources : INSEE, IGN, Cassini, 2023.", scale = NULL, horiz = FALSE,
author = "G. Bideau", frame ="", col = NA)
# Ajout d'un carton pour la région parisienne
par(new = TRUE)
par(fig=c(0.6, 0.9, 0.05, 0.25)) # On indique où placer le carton
par(mar = c(0, 0, 0, 0)) # On réduit les marges au maximum
plot(ShpDep_IdF, col = "grey", border = "white", axes = FALSE)
choroLayer(spdf = ShpDep_IdF, # SpatialPolygonsDataFrame, pour l'IdF
df = pr_carte, # data frame
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "tx_evol",
# Si on souhaite faire les groupes manuellement :
breaks = c(-60, -10, -5, 0, 5, 10, 30), # liste des seuils (hypothèses)
col = carto.pal(pal1 = "blue.pal", n1 = 3, pal2 = "red.pal", n2 = 3),
# Si on souhaite avoir des groupes par quantiles :
# col = carto.pal(pal1 = "sand.pal", n1 = 4), method = "quantile",
nclass = 6,
add=TRUE, legend.pos = "n", )
# On rajoute les cercles en fonction de l'évolution en valeur absolue, pour l'IdF
# Cette dernière partie bloque pour certaines périodes donc on peut rajouter cette condition.
if (substr(date_phase, start = 6, stop = 9) != "1954"
& substr(date_phase, start = 1, stop = 4) != "1975"
& substr(date_phase, start = 1, stop = 4) != "1982"
& substr(date_phase, start = 6, stop = 9) != "1891"
& substr(date_phase, start = 1, stop = 4) != "1891") {
propSymbolsLayer(spdf = ShpDep_IdF,
df = pr_carte,
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "evol_abs_negatif",
inches = 0.2,
fixmax = 500,
# breakval = 0, # On précise une valeur tournant
symbols = "circle",
col = "blue",
# col2 = "red",
legend.pos = "n",
add = TRUE)
}
# dev.off()
# dev.print(device = svg, file = paste0("figures/temps_long/carte_evol_nbr_comm_dep_", date_phase, ".svg"))
par(fig=c(0, 1, 0, 1)) # On reprend l'ensemble de la place pour les figures
par(mar = c(5.1, 4.1, 4.1, 2.1)) # Et les marges
}
# NB : Nécessite d'avoir les cartes, cf. la fonction "dev.print" plus haut (à décommenter si modification des cartes)
par(mfrow = c(2,3))
for (date_phase in dates_phases) {
# date_phase <- paste0(substr(phase, start = 6, stop = 9), "-", substr(phase, start = 11, stop = 14))
# On extrait les données à la phase voulue pour simplifier la cartographie
pr_carte <- evol_deps[, c("Département", "CODE_DEPT", paste0("evol_", date_phase), paste0("tx_evol_", date_phase))]
colnames(pr_carte) <- c("Département", "CODE_DEPT", "evol_abs", "tx_evol")
plot(ShpDep, col = "grey", border = "white", axes = FALSE) # Fond de carte
# Carte choroplèthe en fonction de la superficie moyenne des communes dans le département
choroLayer(spdf = ShpDep, # SpatialPolygonsDataFrame
df = pr_carte, # data frame
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "tx_evol",
# Si on souhaite faire les groupes manuellement :
breaks = c(-60, -10, -5, 0, 5, 10, 30), # liste des seuils (hypothèses)
col = carto.pal(pal1 = "blue.pal", n1 = 3, pal2 = "red.pal", n2 = 3),
# Si on souhaite avoir des groupes par quantiles :
# col = carto.pal(pal1 = "sand.pal", n1 = 4), method = "quantile",
nclass = 6,
add=TRUE,
legend.pos = "topleft",
legend.title.txt = "Taux d'évolution")
layoutLayer(title = paste0("Évolution du nombre de communes par départements\n(", date_phase, ")"), coltitle = "black",
sources = "Sources : INSEE, IGN, Cassini, 2023.", scale = NULL, horiz = FALSE,
author = "G. Bideau", frame ="", col = NA)
}
[Partie de code non utilisée, ne constituait que des tests]
Travail sur les arrondissements envisagé avec Nicolas Verdier mais en attente d’un travail sur l’assignation de chaque commune Cassini à une commune récente ou à un arrondissement.
Compilation données
Compilation qui a été bricolée par copié/collé, tout est à revérifier une fois qu’on aura un champs propre
liste_arrond <- sort(unique (cassini$departement_1999)) # Champ de la base Cassini à reprendre
num_arrond <- 21
# Création d'un tableau pour accueillir les données de l'ensemble des départements
evol_arrond <- data.frame()
for (num_arrond in liste_arrond) {
cassini_reduite <- subset(cassini, departement_1999 == num_arrond)
nom_dep <- dep$LIBELLE[dep$CODE_DEPT == num_arrond]
evol_nbr_com_reduit <- data.frame() # Création d'un objet pour récupérer les résultats de la base réduite
# Boucle pour exploiter les données date par date
for (label in labels_data_pop) {
annee <- substr(label, start =5, stop = nchar(label)-5) # On repère le n° de l'année en segmentant le label
sous_tableau_reduit <- subset(cassini_reduite, cassini_reduite[, label] == "pop" | cassini_reduite[, label] == "lac." | cassini_reduite[, label] == "abs.") # On crée un sous-tableau comptant uniquement les communes dont la population nous intéresse, à l'année donnée
# sous_tableau_reduit <- subset(cassini_reduite, cassini_reduite[, label] == "pop") # Juste avec les populations connues
nbr_com_reduit <- nrow(sous_tableau_reduit) # On compte le nombre de communes
pop_annee_dep <- sum(as.numeric(sous_tableau_reduit[, paste0("pop_", annee, "_val")]), na.rm=TRUE)
i_reduit <- c(annee, nbr_com_reduit, pop_annee_dep) # On compile les résultats totaux
evol_nbr_com_reduit <- rbind(evol_nbr_com_reduit, i_reduit, stringsAsFactors = FALSE)
}
# On traite à la main les deux années 2011 et 2021
# Pour 2011, on fait la liste des CODGEO unique de 2021 et on multiplie par leur nombre de communes fusionnantes (donne le nombre de communes en 2011)
# Pas très propre mais pas l'énergie de faire mieux là...
CODGEO_2021_reduit <- as.data.frame(unique(cassini_reduite$commune_mars_2021))
colnames(CODGEO_2021_reduit) <- "CODGEO_new"
# On joint pour avoir le nombre de communes fusionnantes
CODGEO_2021_reduit <- merge(df_new[c("CODGEO_new", "NbrComFus", "P09_POP")], CODGEO_2021_reduit, by = "CODGEO_new", all.y = TRUE)
# Pour les communes non fusionnantes, on indique qu'il y en a une
CODGEO_2021_reduit$NbrComFus[is.na(CODGEO_2021_reduit$NbrComFus)] <- 1
i_2011_reduit <- c(2011, sum(CODGEO_2021_reduit$NbrComFus), sum(CODGEO_2021_reduit$P09_POP))
evol_nbr_com_reduit <- rbind(evol_nbr_com_reduit, i_2011_reduit)
# Pour 2021, on liste simplement le nombre de CODGEO uniques de 2021 pour chacun des groupe
i_2021_reduit <- c(2021, length(unique(cassini_reduite$commune_mars_2021)), NA)
evol_nbr_com_reduit <- rbind(evol_nbr_com_reduit, i_2021_reduit)
colnames (evol_nbr_com_reduit) <- c("annees", "nbr_com", "population")
evol_nbr_com <- evol_nbr_com_reduit
# evol_nbr_com[c(1,2), 1] <- c(1795, 1800) # On modifie l'intitulé pour faciliter la représentation graphique
# Est désormais fait plus haut
# evol_nbr_com$annees[evol_nbr_com$annees == "an3"] <- 1795
# evol_nbr_com$annees[evol_nbr_com$annees == "an8"] <- 1800
evol_nbr_com[,1] <- as.numeric(evol_nbr_com[,1]) # On passe en numérique pour faciliter la représentation
evol_nbr_com[,2] <- as.numeric(evol_nbr_com[,2]) # Si on veut faire une seule colonne
evol_nbr_com[,3] <- as.numeric(evol_nbr_com[,3]) # Si on veut faire une seule colonne
# Calcul de l'évolution en valeur absolue du nombre de commune dans le département
evol_nbr_com$evol <- evol_nbr_com$nbr_com - lag(evol_nbr_com$nbr_com)
# Calcul du taux d'évolution
evol_nbr_com$tx_evol <- round(100 * (evol_nbr_com$nbr_com - lag(evol_nbr_com$nbr_com)) / lag(evol_nbr_com$nbr_com), 2)
# On compile les résultats du département en question
arrondissement <- c(num_arrond, evol_nbr_com$nbr_com, evol_nbr_com$evol, evol_nbr_com$tx_evol)
# On ajoute ces résultats dans le tableau global
evol_arrond <- rbind (arrondissement, departement, stringsAsFactors = FALSE)
rm(label, annee, nbr_com_reduit, sous_tableau_reduit, i_reduit, i_2021_reduit, CODGEO_2021_reduit, i_2011_reduit, graphique)
}
# Création d'une colonne identifiant les deux recensements en jeu dans les évolutions
evol_nbr_com$ident_evol <- paste0("evol_", lag(evol_nbr_com$annees), "_", evol_nbr_com$annees)
# On identifie les colonnes du tableau regroupant les données de tous les départements
colnames(evol_arrond) <- c(" Code Arrondissement ?? ", evol_nbr_com$annees, evol_nbr_com$ident_evol, paste0("tx_", evol_nbr_com$ident_evol))
Cartographie
# Phases envisagées au départ par Nicolas Verdier :
# 1790-1837, 1838-1884, puis 1885-1970, puis 1970-2000, puis 2000-2023
# Phases retenues du fait des données par recensement :
evol_deps$evol_1800_1836 <- evol_deps$`1836` - evol_deps$`1800`
evol_deps$evol_1836_1886 <- evol_deps$`1886` - evol_deps$`1836`
evol_deps$evol_1886_1968 <- evol_deps$`1968` - evol_deps$`1886`
evol_deps$evol_1968_1999 <- evol_deps$`1999` - evol_deps$`1968`
evol_deps$evol_1999_2021 <- evol_deps$`2021` - evol_deps$`1999`
evol_deps$tx_evol_1800_1836 <- round(100 * (evol_deps$`1836` - evol_deps$`1800`) / evol_deps$`1800`, 2)
evol_deps$tx_evol_1836_1886 <- round(100 * (evol_deps$`1886` - evol_deps$`1836`) / evol_deps$`1836`, 2)
evol_deps$tx_evol_1886_1968 <- round(100 * (evol_deps$`1968` - evol_deps$`1886`) / evol_deps$`1886`, 2)
evol_deps$tx_evol_1968_1999 <- round(100 * (evol_deps$`1999` - evol_deps$`1968`) / evol_deps$`1968`, 2)
evol_deps$tx_evol_1999_2021 <- round(100 * (evol_deps$`2021` - evol_deps$`1999`) / evol_deps$`1999`, 2)
# colnames(evol_deps)
phases <- c("evol_1800_1836", "evol_1836_1886", "evol_1886_1968", "evol_1968_1999", "evol_1999_2021")
date_phases <- paste0(substr (phases, start = 6, stop = 9), "-", substr (phases, start = 11, stop = 14))
phase <- phases[1]
# Pour faciliter la carte
# ShpDep <- as(dep, "Spatial")
ShpDep <- as_Spatial(dep) # Pose moins de problème
ShpDep_IdF <- subset (ShpDep, ShpDep$CODE_DEPT == "75" | ShpDep$CODE_DEPT == "77" | ShpDep$CODE_DEPT == "78" | ShpDep$CODE_DEPT == "91" |
ShpDep$CODE_DEPT == "92" | ShpDep$CODE_DEPT == "93" | ShpDep$CODE_DEPT == "94" | ShpDep$CODE_DEPT == "95")
for (phase in phases) {
date_phase <- paste0(substr(phase, start = 6, stop = 9), "-", substr(phase, start = 11, stop = 14))
# On extrait les données à la phase voulue pour simplifier la cartographie
pr_carte <- evol_deps[, c("Département", "CODE_DEPT", phase, paste0("tx_", phase))]
colnames(pr_carte) <- c("Département", "CODE_DEPT", "evol_abs", "tx_evol")
# Carte départementale présentant l'évolution du nombre de communes
# Si on veut exporter (remettre dev.off en fin de séquence)
# svg(paste0("figures/Evol nombre de communes par départements (", date_phases, ", taux).svg"))
plot(ShpDep, col = "grey", border = "white", axes = FALSE) # Fond de carte
# Carte choroplèthe en fonction de la superficie moyenne des communes dans le département
choroLayer(spdf = ShpDep, # SpatialPolygonsDataFrame
df = pr_carte, # data frame
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "tx_evol",
# Si on souhaite faire les groupes manuellement :
breaks = c(-60, -10, -5, 0, 5, 10, 30), # liste des seuils (hypothèses)
col = carto.pal(pal1 = "blue.pal", n1 = 3, pal2 = "red.pal", n2 = 3),
# Si on souhaite avoir des groupes par quantiles :
# col = carto.pal(pal1 = "sand.pal", n1 = 4), method = "quantile",
nclass = 6,
add=TRUE,
legend.pos = "topleft",
legend.title.txt = "Taux d'évolution du\nnombre de communes\nsur la période")
layoutLayer(title = paste0("Évolution du nombre de communes par départements (", date_phase, ")"), coltitle = "black",
sources = "Sources : INSEE, IGN, Cassini.", scale = NULL,
author = "G. Bideau", frame ="", col = NA)
# Ajout d'un carton pour la région parisienne
# Page claire pour aider sur la représentation graphique : https://sites.google.com/site/rgraphiques/realiser-des-graphiques-avec-le-logiciel-r/g%C3%A9rer-les-graphiques-combinaisons-forme-et-sauvegarde/combinaisons-graphiques
par(new = TRUE)
par(fig=c(0.7, 1, 0, 0.2)) # On indique où placer le carton
par(mar = c(0, 0, 0, 0)) # On réduit les marges au maximum
plot(ShpDep_IdF, col = "grey", border = "white", axes = FALSE)
choroLayer(spdf = ShpDep_IdF, # SpatialPolygonsDataFrame
df = pr_carte, # data frame
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "tx_evol",
# Si on souhaite faire les groupes manuellement :
breaks = c(-60, -10, -5, 0, 5, 10, 30), # liste des seuils (hypothèses)
col = carto.pal(pal1 = "blue.pal", n1 = 3, pal2 = "red.pal", n2 = 3),
# Si on souhaite avoir des groupes par quantiles :
# col = carto.pal(pal1 = "sand.pal", n1 = 4), method = "quantile",
nclass = 6,
add=TRUE,
legend.pos = "n",
legend.title.txt = "Taux d'évolution du\nnombre de communes\nsur la période")
# dev.off()
par(fig=c(0, 1, 0, 1)) # On indique où placer le carton
# Carte départementale présentant l'évolution du nombre de communes en valeur absolue
# Création d'un champs adapté pour la cartographie
pr_carte$evol_abs_negatif <- 0 -pr_carte$evol_abs
pr_carte$evol_abs_negatif[pr_carte$evol_abs_negatif < 0] <- NA
# Si on veut exporter (remettre dev.off en fin de séquence)
# svg(paste0("figures/Evol nombre de communes par départements (", date_phases, ", valeurs absolues).svg"))
plot(ShpDep, col = "grey", border = "white", axes = FALSE) # Fond de carte
# Carte choroplèthe en fonction de la superficie moyenne des communes dans le département
choroLayer(spdf = ShpDep, # SpatialPolygonsDataFrame
df = pr_carte, # data frame
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "tx_evol",
# Si on souhaite faire les groupes manuellement :
breaks = c(-60, -10, -5, 0, 5, 10, 30), # liste des seuils (hypothèses)
col = carto.pal(pal1 = "blue.pal", n1 = 3, pal2 = "red.pal", n2 = 3),
# Si on souhaite avoir des groupes par quantiles :
# col = carto.pal(pal1 = "sand.pal", n1 = 4), method = "quantile",
nclass = 6,
add=TRUE,
legend.pos = "topleft",
legend.title.txt = "Taux d'évolution")
# On rajoute les cercles en fonction de l'évolution en valeur absolue
propSymbolsLayer(spdf = ShpDep,
df = pr_carte,
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "evol_abs_negatif",
inches = 0.2,
fixmax = 500,
# breakval = 0, # On précise une valeur tournant
symbols = "circle",
col = "blue",
# col2 = "red",
legend.pos = "left",
legend.title.txt = "\n\n\n\n\n\nNombre de communes\nsupprimées",
legend.style = "c",
legend.frame = FALSE,
add = TRUE)
layoutLayer(title = paste0("Évolution du nombre de communes par départements (", date_phase, ")"), coltitle = "black",
sources = "Sources : INSEE, IGN, Cassini, 2023.", scale = NULL, horiz = FALSE,
author = "G. Bideau", frame ="", col = NA)
# Ajout d'un carton pour la région parisienne
par(new = TRUE)
par(fig=c(0.7, 1, 0, 0.2)) # On indique où placer le carton
par(mar = c(0, 0, 0, 0)) # On réduit les marges au maximum
plot(ShpDep_IdF, col = "grey", border = "white", axes = FALSE)
choroLayer(spdf = ShpDep_IdF, # SpatialPolygonsDataFrame, pour l'IdF
df = pr_carte, # data frame
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "tx_evol",
# Si on souhaite faire les groupes manuellement :
breaks = c(-60, -10, -5, 0, 5, 10, 30), # liste des seuils (hypothèses)
col = carto.pal(pal1 = "blue.pal", n1 = 3, pal2 = "red.pal", n2 = 3),
# Si on souhaite avoir des groupes par quantiles :
# col = carto.pal(pal1 = "sand.pal", n1 = 4), method = "quantile",
nclass = 6,
add=TRUE, legend.pos = "n", )
# On rajoute les cercles en fonction de l'évolution en valeur absolue, pour l'IdF
propSymbolsLayer(spdf = ShpDep_IdF,
df = pr_carte,
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "evol_abs_negatif",
inches = 0.2,
fixmax = 500,
# breakval = 0, # On précise une valeur tournant
symbols = "circle",
col = "blue",
# col2 = "red",
legend.pos = "n",
add = TRUE)
# dev.off()
}
On observe ici, département par département, le nombre de communes en fonction de certains seuils démographiques
labels_data_pop <- colnames(cassini[grep(pattern = "_info", colnames(cassini), ignore.case = FALSE)])
annees_recensement <- substr(labels_data_pop, start =5, stop = nchar(labels_data_pop)-5) # On repère le n° de l'année en segmentant le label
# On rajoute 2011 et 2021 (ce n'est pas prêt, les données n'ont pas été rajoutées dans la base Cassini)
# annees_recensement <- c(annees_recensement, 2011, 2021)
listeSeuils <- c(50, 100, 200, 500, 1000, 2000, 9999999)
annee <- annees_recensement[1]
seuil <- listeSeuils[1]
for (annee in annees_recensement) {
results <- evol_deps[, c("CODE_DEPT", "Département", annee)]
temp <- cassini[, c("nom_cassini", paste0("pop_", annee, "_val"), paste0("pop_", annee, "_info"), "departement_1999")]
colnames(temp) <- c("nom_cassini", "pop", "info", "CODE_DEPT")
temp$pop <- as.numeric (temp$pop)
# Tableau présentant, par département, la qualité des données sur l'année étudiée, s'y reporter pour valider les données
table(temp$info, temp$CODE_DEPT)
for (seuil in listeSeuils) {
temp_sub <- subset(temp, temp$pop < seuil)
# On compte le nombre de communes par départements étant en-dessous du seuil fixé
temp2 <- data.frame(table(temp_sub$CODE_DEPT))
temp2$Var1 <- as.character(temp2$Var1)
temp2[nrow(temp2)+1,] <- c("", sum(as.numeric(temp2$Freq)))
colnames(temp2)<-c("CODE_DEPT", paste0("ComMoins", seuil, "hab_", annee))
temp2[,2] <- as.numeric (temp2[,2])
results <- merge(results, temp2, by = "CODE_DEPT", all.x = TRUE)
results[, paste0("PartComMoins", seuil, "hab_", annee)] = round((results[, paste0("ComMoins", seuil, "hab_", annee)] /
results[, annee] *100), 1)
# Calculs qui pourraient avoir de l'intérêt mais risquent d'alourdir le tableau donc laissés de côté.
# Si volonté de les intégrer, revoir la rédaction (adaptations nécessaires, par exemple i = seuil)
# results[, paste0("EvolNbrComMoins", i, "hab")] = results[, paste0("ComMoins", i, "habAp")] -
# results[, paste0("ComMoins", i, "habAv")] # Calcul de l'évolution en valeur absolue
# results[, paste0("EvolComMoins", i, "hab")] =
# round((
# (results[, paste0("ComMoins", i, "habAp")] - results[, paste0("ComMoins", i, "habAv")]) /
# results[, paste0("ComMoins", i, "habAv")] *100), 1) # Calcul du pourcentage d'évolutions du nombre de communes sous le seuil i
# results[, paste0("EvolPartComMoins", i, "hab")] =
# round((
# (results[, paste0("PartComMoins", i, "habAp")] - results[, paste0("PartComMoins", i, "habAv")]) / results[, paste0("PartComMoins", i, "habAv")]*100), 1) # calcul de l'évolution de la part des communes sous le seuil i
# Suite laissée de côté car pas adapté aux données Cassini (vient du fichier d'analyse des communes nouvelles)
# Pour calculer le nombre de communes sous le seuil i ayant fusionné
# temp3 <- subset(df2011, df2011$P09_POP < i & FUSION == "OUI")
# temp3 <- data.frame(table(temp3$CODE_DEPT))
# colnames(temp3)<-c("CODE_DEPT", paste0("ComFusMoins", i, "hab"))
# results <- merge(results, temp3, by = "CODE_DEPT", all.x = TRUE)
}
evol_deps <- merge(evol_deps, results[, c(1, 4:length(results))], by = "CODE_DEPT")
# evol_deps[is.na(evol_deps)] <- "0/NA" # Si on veut signaler les départements pour lesquels aucunes communes sous les seuils n'ont été repérées (car risque qu'il s'agisse d'une absence de données)
}
rm(temp, temp_sub, temp2, results)
# Export données
try(save(cassini, evol_deps, listeSeuils, annees_recensement, evol_deps_100, file = "nbr_communes_Fr_shiny/data/dataCassini.Rdata"))
st_write(obj = dep, dsn = "nbr_communes_Fr_shiny/data/geom.gpkg", layer = "dep_tte_France", delete_layer = TRUE, quiet = TRUE)
# Test import données
dep <- st_read("nbr_communes_Fr_shiny/data/geom.gpkg", layer = "dep_tte_France", quiet = TRUE)
load ("nbr_communes_Fr_shiny/data/dataCassini.Rdata")
departement <- evol_deps$Département[2]
liste_dep <- evol_deps$Département
# liste_dep <- liste_dep[1] # Pour n'afficher que les graphiques sur la France entière
# for (seuil in listeSeuils [c(1, 2, 4, 6)]) { Si on veut alléger les sorties
for (seuil in listeSeuils) {
for (departement in liste_dep) {
num_dep <- evol_deps$CODE_DEPT[evol_deps$Département == departement]
evol_dep <- subset(evol_deps, evol_deps$Département == departement)
# Graphique, pour chaque département, de l'évolution du nombre de communes sous certain seuil
colonnes_select <- colnames(evol_deps[grep(pattern = paste0("^ComMoins", seuil, "hab"), colnames(evol_deps), ignore.case = FALSE)])
pr_graph <- evol_dep[, colonnes_select]
colnames(pr_graph) <- substr (colnames(pr_graph), start = nchar(colnames(pr_graph))-3, stop = nchar(colnames(pr_graph)))
pr_graph <- melt(pr_graph)
pr_graph[,1] <- as.numeric(as.character(pr_graph[,1]))
colnames(pr_graph) <- c("annees", "nbr_com")
graphique <- ggplot(data=pr_graph, aes(x=annees, y=nbr_com)) +
geom_line() +
ylim(0, max(pr_graph$nbr_com)+50) +
scale_x_continuous (breaks = seq(1780, 2030, 20)) +
labs(title= paste0("Nombre de communes de moins de ", seuil, " hab. en ", departement, " (", num_dep, ")"), subtitle="1795-2021", x="", y = paste0("Nombre de communes de moins de ", seuil," habitants"), caption="Sources : cassini.ehess.fr, INSEE")
print(graphique)
colonnes_select <- colnames(evol_deps[grep(pattern = paste0("PartComMoins", seuil, "hab"), colnames(evol_deps), ignore.case = FALSE)])
pr_graph <- evol_dep[, colonnes_select]
colnames(pr_graph) <- substr (colnames(pr_graph), start = nchar(colnames(pr_graph))-3, stop = nchar(colnames(pr_graph)))
pr_graph <- melt(pr_graph)
pr_graph[,1] <- as.numeric(as.character(pr_graph[,1]))
colnames(pr_graph) <- c("annees", "prop_com")
graphique <- ggplot(data=pr_graph, aes(x=annees, y=prop_com)) +
geom_line() +
ylim(0, max(pr_graph$prop_com)+10) +
scale_x_continuous (breaks = seq(1780, 2030, 20)) +
labs(title= paste0("Proportion de communes de moins de ", seuil, " hab. en ", departement, " (", num_dep, ")"), subtitle="1795-2021", x="", y = paste0("Pourcentage de communes de moins de ", seuil," habitants"), caption="Sources : cassini.ehess.fr, INSEE")
print(graphique)
}
for (annee in annees_recensement) {
colonne_select <- colnames(evol_deps[grep(pattern = paste0("^ComMoins", seuil, "hab_", annee), colnames(evol_deps), ignore.case = FALSE)])
# NB : Ajouter "^" pour signifier un début de ligne, pour différencier PartComMoins et ^ComMoins
pr_repr <- evol_deps[, c("Département", "CODE_DEPT", colonne_select)]
colnames(pr_repr) <- c("Département", "CODE_DEPT", "Données")
plot(ShpDep, col = "grey", border = "white", axes = FALSE) # Fond de carte
# Carte choroplèthe en fonction de la superficie moyenne des communes dans le département
# On rajoute les cercles en fonction de l'évolution en valeur absolue
propSymbolsLayer(spdf = ShpDep,
df = pr_repr,
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "Données",
inches = 0.2,
# breakval = 0, # On précise une valeur tournant
symbols = "circle",
col = "blue",
# col2 = "red",
legend.pos = "left",
# legend.title.txt = "Nombre de communes sous le seuil",
legend.style = "c",
legend.frame = FALSE,
add = TRUE)
layoutLayer(title = paste0("Nombre de communes de moins de ", seuil, " habitants (", annee, ")"), coltitle = "black",
sources = "Sources : INSEE, IGN, Cassini, 2023.", scale = NULL, horiz = FALSE,
author = "G. Bideau", frame ="", col = NA)
# En regardant la part de communes
colonne_select <- colnames(evol_deps[grep(pattern = paste0("PartComMoins", seuil, "hab_", annee), colnames(evol_deps), ignore.case = FALSE)])
# NB : Ajouter "^" pour signifier un début de ligne, pour différencier PartComMoins et ^ComMoins
pr_repr <- evol_deps[, c("Département", "CODE_DEPT", colonne_select)]
colnames(pr_repr) <- c("Département", "CODE_DEPT", "Données")
plot(ShpDep, col = "grey", border = "white", axes = FALSE) # Fond de carte
# Carte choroplèthe en fonction de la superficie moyenne des communes dans le département
choroLayer(spdf = ShpDep, # SpatialPolygonsDataFrame
df = pr_repr, # data frame
spdfid = "CODE_DEPT",
dfid = "CODE_DEPT",
var = "Données",
# Si on souhaite faire les groupes manuellement :
# breaks = c(-60, -10, -5, 0, 5, 10, 30), # liste des seuils (hypothèses)
# col = carto.pal(pal1 = "blue.pal", n1 = 3, pal2 = "red.pal", n2 = 3),
# Si on souhaite avoir des groupes par quantiles :
# col = carto.pal(pal1 = "sand.pal", n1 = 4), method = "quantile",
nclass = 5,
col = carto.pal(pal1 = "blue.pal", n1 = 0, pal2 = "red.pal", n2 = 5),
add=TRUE,
legend.pos = "topleft",
legend.title.txt = "")
layoutLayer(title = paste0("Pourcentage de communes de moins de ", seuil, " habitants (", annee, ")"), coltitle = "black",
sources = "Sources : INSEE, IGN, Cassini, 2023.", scale = NULL, horiz = FALSE,
author = "G. Bideau", frame ="", col = NA)
}
}
Création section pour le moment où on a besoin de relancer juste cette partie du code.
# dep <- st_read("data/geom.gpkg", layer = "dep", quiet = TRUE)
# Pour faciliter la cortographie
# ShpDep <- as_Spatial(dep)
dep <- st_read("nbr_communes_Fr_shiny/data/geom.gpkg", layer = "dep_tte_France", quiet = TRUE)
load ("nbr_communes_Fr_shiny/data/dataCassini.Rdata")
dates_phases <- c("1800-1836", "1836-1886", "1886-1968", "1968-1999", "1999-2021")
# Calcul de quelques variables
dep <- merge (dep, evol_deps, by = "CODE_DEPT")
# Création d'une variable de surface
dep$surface <- st_area(dep) # Attention, unités : m²
dep$surface <- units::set_units(dep$surface, km^2) # On passe en km²
# Densité de communes en 1800 et en 2021
dep$dens_comm_1800 <- as.numeric(dep$`1800`/dep$surface)
dep$dens_comm_2021 <- as.numeric(dep$`2021`/dep$surface)
# Nombre d'habitants par km²
dep$dens_1800 <- as.numeric(dep$pop_1800)/dep$surface
dep$dens_2011 <- as.numeric(dep$pop_2011)/dep$surface
# Nombre de communes par habitants
# dep$dens_1800 <- dep$`1800`/as.numeric(dep$pop_1800)
# dep$dens_2011 <- dep$`2011`/as.numeric(dep$pop_2011)
# PourCAH <- merge (evol_deps_100, dep[, c("CODE_DEPT")])
# nom_test_CAH <- "ts_recensements_1800-2011"
# Remarques : Cartographie assez confuse, avec un groupe 2 très important et regroupant des départements qu'a priori on aurait dissociés.
# PourCAH <- merge (evol_deps_100, dep[, c("CODE_DEPT", "dens_comm_1800", "dens_comm_2021", "dens_1800", "dens_2011")])
# nom_test_CAH <- "ts_recensements_1800-2011_denscomm_denspop"
# Si on veut utiliser les données des évolutions par phases plutôt que les données pour chaque recensement
# PourCAH <- dep[, c("Département", "CODE_DEPT", "dens_comm_1800", "dens_comm_2021", "dens_1800", "dens_2011", "tx_evol_1800_1836", "tx_evol_1836_1886", "tx_evol_1886_1968", "tx_evol_1968_1999", "tx_evol_1999_2021")]
# nom_test_CAH <- "evol_phases_1800-2011_denscomm_denspop"
# Évolutions par phases mais sans la densité
# PourCAH <- dep[, c("Département", "CODE_DEPT", "tx_evol_1800_1836", "tx_evol_1836_1886", "tx_evol_1886_1968", "tx_evol_1968_1999", "tx_evol_1999_2021")]
variablesCAH_phases <- paste0("tx_evol_", dates_phases)
# Avec les noms automatiques en fonction des phases choisies en amont
PourCAH <- dep[, c("Département", "CODE_DEPT", variablesCAH_phases)]
nom_test_CAH <- "evol_phases_1800-2011"
# On retire Aveyron et Paris
PourCAH <- subset(PourCAH, PourCAH$Département != "Aveyron")
# nom_test_CAH <- paste0(nom_test_CAH, "_sfAveyron")
PourCAH <- subset(PourCAH, PourCAH$Département != "Paris")
# nom_test_CAH <- paste0(nom_test_CAH, "_sf_Paris")
nom_test_CAH <- paste0(nom_test_CAH, "_sf_ParisAveyron")
# PourCAH <- subset(PourCAH, PourCAH$Département != "Hauts-de-Seine" &
# PourCAH$Département != "Seine-Saint-Denis" &
# PourCAH$Département != "Val-de-Marne")
# nom_test_CAH <- paste0(nom_test_CAH, "_sf_Paris_PtCourr_Aveyron")
# Préparation des données
PourCAH <- na.omit(PourCAH)
row.names(PourCAH) <- PourCAH$Département
PourCAH$Département <- NULL
PourCAH$CODE_DEPT <- NULL
PourCAH$`1800` <- NULL # Inutile car sert de base 100
PourCAH$geometry <- NULL
# PourCAH <- scale(PourCAH) # Standardisation
NbrVariables <- ncol(PourCAH)
selecVarCAH <- colnames(PourCAH)
# Réalisation de la typologie
# On commence par réaliser une ACP (conseil donné dans R et espace, chapitre 7, p. 135)
res.pca <- PCA(PourCAH, ncp = 8, graph = TRUE)
#res.pca <- PCA(PourCAH, ncp = 5, graph = FALSE) # 50 % of cumulative variance
# res.hcpc <- HCPC(res.pca, graph = TRUE, method = "ward", metric = "euclidian") #Ici coupure à 8 classes pas trop mal
# res.hcpc <- HCPC(res.pca, graph = FALSE, nb.clust = 7, method = "ward", metric = "euclidian") #Pour faire la coupure de manière déterministe
res.hcpc <- agnes(res.pca$ind$coord, metric = "euclidiean", method = "ward")
dev.off()
## null device
## 1
# Réalisation du dendrogramme en passant par plot
dendro.hcpc <- as.dendrogram(res.hcpc)
plot(dendro.hcpc, leaflab = "none", ylab = "Dissimilarité")
inertie <- sort(res.hcpc$height, decreasing = TRUE)
plot(inertie[1:20], type = "s", xlab = "Nombre de classes", ylab = "Inertie")
# Affichage de différents graphiques pour aider au découpage
sortedHeight <- sort(res.hcpc$height^2, decreasing = TRUE)
plot(sortedHeight,
type = "h",
xlab = "Noeuds",
ylab = "Niveau d'agrégation")
relHeight <- sortedHeight / sum(sortedHeight) * 100
cumHeight <- cumsum(relHeight)
barplot(relHeight[1:30], names.arg = seq(1, 30, 1),
col = "black", border = "white", xlab = "Noeuds",
ylab = "Part de l'inertie totale (%)",
main = "Diagramme de niveaux")
# Coupure de l'arbre (k = nombre de classes)
nclass <- 5
cluspop <- cutree(res.hcpc, k = nclass)
# couleurs <- c("#e41a1c","#377eb8","#4daf4a","#984ea3") # Pour 4
# couleurs <- c("#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00") # Pour 5
couleurs <- c("#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf") # Pour 8
NomsGroupesCAH <- paste ("Groupe", 1:nclass)
NomsGroupesCAH <- c("Groupe 1", "Groupe 4", "Groupe 3", "Groupe 5", "Groupe 2")
# Valeurs absolues
# On intègre ces données dans le tableau de départ
PourCAH <- as.data.frame(PourCAH, stringsAsFactors = FALSE)
PourCAH$Groupes <- factor(cluspop,
levels = 1:nclass,
labels = paste(NomsGroupesCAH))
# Pour réordonner le facteur
PourCAH$Groupes <- factor(PourCAH$Groupes, paste ("Groupe", 1:nclass))
PourCAH$Département <- row.names(PourCAH)
# On rajoute le numéro de département
PourCAH <- merge (PourCAH, evol_deps_100 [, c("Département", "CODE_DEPT")], by = "Département")
# Calcul de la moyenne des variables
clusProfile <- aggregate(PourCAH [, 2:(NbrVariables+1)],
by = list(PourCAH$Groupes),
mean)
colnames(clusProfile)[1] <- "Groupes"
clusLong <- melt(clusProfile, id.vars = "Groupes")
ggplot(clusLong) +
geom_bar(aes(x = variable, y = value, fill = Groupes),
stat = "identity") +
# scale_fill_brewer() +
scale_fill_manual(values=couleurs) +
facet_wrap(~ Groupes) +
theme(axis.text.x = element_text(angle = 56, hjust = 1)) + # Ne marche pas ?
theme_bw()
ggplot(clusLong) +
geom_bar(aes(x = variable, y = value, fill = Groupes),
stat = "identity") +
scale_fill_manual(values=couleurs) +
facet_wrap(~ Groupes) +
coord_flip() +
theme_bw()
# dev.print(device = svg, file = paste0("sorties/CAH_tps_long/", nom_test_CAH, "val_abs.svg"))
ggplot(clusLong) +
geom_line(aes(x = variable, y = value, group = 1)) +
scale_fill_brewer() +
facet_wrap(~ Groupes) +
theme(axis.text.x = element_text(angle = 56, hjust = 1)) + # Ne marche pas ?
theme(strip.text.x = element_text(angle = 45, vjust = 0.5, hjust = 1)) + # Ne marche pas ?
theme_bw()
# Modification du graphique pour la revue Cybergéo
# Modification des noms des groupes
Groupes.labs <- c("Groupe 1 :\nDiminutions modérées",
"Groupe 4 :\nFusions-association dites « Marcellin »",
"Groupe 3 :\nFaibles diminutions voire augmentations",
"Groupe 5 :\nCommunes nouvelles",
"Groupe 2 :\nFusions notables début XIXe siècle")
names(Groupes.labs) <- NomsGroupesCAH
# Modification de l'identification des variables
clusLong_modif <- clusLong
levels(clusLong_modif$variable)
## [1] "tx_evol_1800-1836" "tx_evol_1836-1886" "tx_evol_1886-1968"
## [4] "tx_evol_1968-1999" "tx_evol_1999-2021"
levels(clusLong_modif$variable) <- substr(levels(clusLong_modif$variable), start = 9, stop = 17)
ggplot(clusLong_modif) +
geom_bar(aes(x = variable, y = value, fill = Groupes),
stat = "identity") +
facet_wrap(~ Groupes, labeller = labeller(Groupes = Groupes.labs)) +
# scale_fill_grey() +
scale_fill_manual(values=couleurs) +
coord_flip() +
theme_bw() +
labs (y = "Taux d'évolution du nombre de communes par département", x = " ") +
theme(legend.position = "none") # Pour cacher la légende
# On intègre ces données dans le tableau de départ
PourCAHz <- scale(PourCAH[,c(2:(NbrVariables+1))])
PourCAHz <- as.data.frame(PourCAHz, stringsAsFactors = FALSE)
PourCAHz$Groupes <- PourCAH$Groupes
PourCAHz$CODGEO <- row.names(PourCAHz)
# Calcul de la moyenne des variables
clusProfileStd <- aggregate(PourCAHz [, 1:NbrVariables],
by = list(PourCAH$Groupes),
mean)
colnames(clusProfileStd)[1] <- "Groupes"
clusLongStd <- melt(clusProfileStd, id.vars = "Groupes")
# clusLongStd <- merge(clusLongStd, ratio[, 1:2], by.x = "variable", by.y = "CODE") # Pour lisibilité du graphique
# colnames(clusLongStd)[4] <- "Variable"
ggplot(clusLongStd) +
geom_bar(aes(x = variable, y = value, fill = Groupes),
stat = "identity") +
# scale_fill_grey() +
scale_fill_manual(values=couleurs) +
facet_wrap(~ Groupes) +
coord_flip() + theme_bw()
# dev.print(device = svg, file = paste0("sorties/CAH_tps_long/", nom_test_CAH, "val_stdrd.svg"))
# Modification du graphique pour la revue Cybergéo
# Modification de l'identification des variables
clusLongStd_modif <- clusLongStd
levels(clusLongStd_modif$variable)
## [1] "tx_evol_1800-1836" "tx_evol_1836-1886" "tx_evol_1886-1968"
## [4] "tx_evol_1968-1999" "tx_evol_1999-2021"
levels(clusLongStd_modif$variable) <- substr(levels(clusLongStd_modif$variable), start = 9, stop = 17)
ggplot(clusLongStd_modif) +
geom_bar(aes(x = variable, y = value, fill = Groupes),
stat = "identity") +
facet_wrap(~ Groupes, labeller = labeller(Groupes = Groupes.labs)) +
# scale_fill_grey() +
scale_fill_manual(values=couleurs) +
coord_flip() +
theme_bw() +
labs (y = "Taux d'évolution du nombre de communes par département", x = "Valeurs standardisées") +
theme(legend.position = "none") # Pour cacher la légende
# Cartographie
# Remettre groupes dans carto
typo <- merge(dep,PourCAH[ , c("CODE_DEPT","Groupes")], by.x = "CODE_DEPT", by.y = "CODE_DEPT")
# mf_export(x = typo, export = "svg", filename = "figures/TypoEspaceGeo.svg",
# width = 5, theme = "nevermind") # Si souhait d'export
par(mfrow = c(1, 1))
par(mar=c(0,0,1.2,0))
plot(st_geometry(dep), border = "#1A1A19",lwd = 1)
typoLayer(x = typo, var = "Groupes",
col = couleurs,
border = NA,
#legend.title = "Typologie des communes fusionnantes/nà partir de critères socio-économiques",
legend.title.cex = 0.7,
legend.values.cex = 0.6,
legend.values.order = levels(PourCAH$Groupes),
legend.pos = "left", add = T)
layoutLayer(title = "Typologie exploratoire des départements en fonction de l'évolution de leur nombre de communes",
author = "G. Bideau, 2024.",
tabtitle = TRUE, frame = FALSE, col = "white", coltitle = "black",
sources = "Sources : base Cassini, INSEE, IGN, 2024.")
# Ajout d'un carton pour la région parisienne # NB : NE MARCHE PAS CAR PROBLÈME DE LA GESTION DES COULEURS
# par(new = TRUE)
# par(fig=c(0.5, 1, 0, 0.5)) # On indique où placer le carton
# par(mar = c(0, 0, 0, 0)) # On réduit les marges au maximum
# typo_IdF <- subset ( typo, typo$CODE_DEPT == "75" | typo$CODE_DEPT == "77" | typo$CODE_DEPT == "78" | typo$CODE_DEPT == "91" |
# typo$CODE_DEPT == "92" | typo$CODE_DEPT == "93" | typo$CODE_DEPT == "94" | typo$CODE_DEPT == "95")
# typoLayer(x = typo_IdF, var = "Groupes",
# col = c(couleurs),
# border = NA,legend.pos = "na", add = T)
# par(fig=c(0, 1, 0, 1)) # On reprend l'ensemble de la place pour les figures
# dev.print(device = svg, file = paste0("sorties/CAH_tps_long/", nom_test_CAH, "_carte.svg"))
Cf. R et espace, chapitre 6 https://r.developpez.com/tutoriels/programmation-graphe/livre-R-et-espace/?page=chapitre-6-analyses-factorielles
Permet de montrer graphiquement les plans factoriels
library(ade4)
PCA <- dudi.pca(PourCAHz[,1:5],
center = TRUE,
scale = TRUE,
scannf = FALSE,
nf = 2)
summaryPca <- data.frame(
EIG = PCA$eig,
PCTVAR = 100 * PCA$eig / sum(PCA$eig),
CUMPCTVAR = cumsum(100 * PCA$eig / sum(PCA$eig))
)
barplot(summaryPca$PCTVAR,
xlab = "Composantes",
ylab = "Pourcentage de la variance (inertie)",
names = paste("C", seq(1, nrow(summaryPca), 1)),
col = "black",
border = "white")
axisCoord <- PCA$co
s.class(PCA$li,
fac = as.factor(PourCAHz$Groupes),
xax = 1, yax = 2)
plot(PCA$li, pch = 20)
abline(h=0, v=0)
Peu convainquant.
PourCOA <- evol_deps[2:nrow(evol_deps), c(bornes, "Département")]
PourCOA <- subset(PourCOA, PourCOA$Département != "Paris" & PourCOA$Département != "Aveyron")
row.names(PourCOA) <- PourCOA$Département
COA <- dudi.coa(PourCOA[,1:length(bornes)],
scannf = FALSE,
nf = 2)
summaryCOA <- data.frame(
EIG = COA$eig,
PCTVAR = 100 * COA$eig / sum(COA$eig),
CUMPCTVAR = cumsum(100 * COA$eig / sum(COA$eig))
)
barplot(summaryCOA$PCTVAR,
xlab = "Composantes",
ylab = "Pourcentage de la variance (inertie)",
names = paste("C", seq(1, nrow(summaryCOA), 1)),
col = "black",
border = "white")
plot(COA$li, pch = 20, col = "grey40")
abline(h=0, v=0)
points(COA$co, type = "o", pch = 18, col = "black")
text(COA$co,
labels = row.names(COA$co),
cex = 0.8,
pos = c(rep(4, times = 3), 1, rep(4, times = 4), 3))
s.class(COA$li,
fac = as.factor(PourCAHz$Groupes))
plot(PCA$li, pch = 20)
abline(h=0, v=0)
# Création d'une variable surface
# Si on part de rien, jouer les deux lignes ci-dessous
# typo <- st_read("sorties/typo.gpkg", quiet = TRUE)
comparaisons <- data.frame( table (typo$Groupes))
comparaisons$surface_moy <- round(tapply (typo$surface, typo$Groupes, mean), 1) # On fait la moyenne de la surface
comparaisons$surface_med <- round(tapply (typo$surface, typo$Groupes, median), 1) # On fait la médiane de la surface
comparaisons$dens_comm_1800_moy <- round(tapply (typo$dens_comm_1800, typo$Groupes, mean), 2) # On fait la moyenne de la densité communale en 1800
comparaisons$dens_comm_1800_med <- round(tapply (typo$dens_comm_1800, typo$Groupes, median), 2) # On fait la médiane de la densité communale en 1800
comparaisons$dens_comm_2021_moy <- round(tapply (typo$dens_comm_2021, typo$Groupes, mean), 2) # On fait la moyenne de la densité communale en 2021
comparaisons$dens_comm_2021_med <- round(tapply (typo$dens_comm_2021, typo$Groupes, median), 2) # On fait la médiane de la densité communale en 2021
comparaisons$dens_1800_moy <- round(tapply (typo$dens_1800, typo$Groupes, mean), 1) # On fait la moyenne de la densité en 1800
comparaisons$dens_1800_med <- round(tapply (typo$dens_1800, typo$Groupes, median), 1) # On fait la médiane de la densité en 1800
comparaisons$dens_2011_moy <- round(tapply (typo$dens_2011, typo$Groupes, mean), 1) # On fait la moyenne de la densité en 2021
comparaisons$dens_2011_med <- round(tapply (typo$dens_2011, typo$Groupes, median), 1) # On fait la médiane de la densité en 2021
comparaisons$pop_1836_moy <- round(tapply (as.numeric(typo$pop_1836)/1000, typo$Groupes, mean), 1) # On fait la moyenne de la population en 1836 en milliers d'habitants
comparaisons$pop_1836_med <- round(tapply (as.numeric(typo$pop_1836)/1000, typo$Groupes, median), 1) # On fait la médiane de la population en 1836 en milliers d'habitants
comparaisons$pop_2011_moy <- round(tapply (as.numeric(typo$pop_2011)/1000, typo$Groupes, mean), 1) # On fait la moyenne de la population en 2021 en milliers d'habitants
comparaisons$pop_2011_med <- round(tapply (as.numeric(typo$pop_2011)/1000, typo$Groupes, median), 1) # On fait la médiane de la population en 2021 en milliers d'habitants
comparaisons$nbr_com_1800_moy <- round(tapply (typo$"1800", typo$Groupes, mean), 1) # Moyenne du nombre de communes en 1800
comparaisons$nbr_com_2021_moy <- round(tapply (typo$"2021", typo$Groupes, mean), 1) # Moyenne du nombre de communes en 2011
comparaisons$nbr_hab_par_comm_1836 <- round(tapply (as.numeric(typo$pop_1836), typo$Groupes, sum)/tapply (typo$"1836", typo$Groupes, sum), 1) # Nombre d'habitants par communes en 1836
comparaisons$nbr_hab_par_comm_2011 <- round(tapply (as.numeric(typo$pop_2011), typo$Groupes, sum)/tapply (typo$"2011", typo$Groupes, sum), 1) # Nombre d'habitants par communes en 2011
tmp <- comparaisons[, c("Var1", "Freq", "surface_moy", "surface_med", "nbr_com_1800_moy", "nbr_com_2021_moy", "dens_comm_1800_moy", "dens_comm_1800_med", "dens_comm_2021_moy", "dens_comm_2021_med", "dens_1800_moy", "dens_1800_med", "dens_2011_moy", "dens_2011_med", "pop_1836_moy", "pop_1836_med", "pop_2011_moy", "pop_2011_med", "nbr_hab_par_comm_1836", "nbr_hab_par_comm_2011")]
colnames(tmp) <- c("Groupe", "Fréquence", "Surface moyenne (km²)", "Surface médiane (km²)", "Nombre de communes moyen en 1800", "Nombre de communes moyen en 2021", "Densité communale en 1800 (moyenne)", "Densité communale en 1800 (médiane)", "Densité communale en 2011 (moyenne)", "Densité communale en 2011 (médiane)", "Densité de population en 1836 (moyenne)", "Densité de population en 1836 (médiane)", "Densité de population en 2011 (moyenne)", "Densité de population en 2011 (médiane)", "Population en 1836 (moyenne, en milliers)", "Population en 1836 (médiane, en milliers)", "Population en 2011 (moyenne, en milliers)", "Population en 2011 (médiane, en milliers)", "Nombre d'habitants par commune en 1836", "Nombre d'habitants par commune en 2011")
table <- condformat(tmp)%>%
theme_caption(caption = "Groupes de la typologie vis-à-vis de différentes caractéristiques des départements") %>%
theme_htmlWidget(number_of_entries = nrow(tmp))
print(table)
table <- condformat(tmp)%>%
rule_fill_gradient2("Surface moyenne (km²)", low = "blue", high = "red") %>%
rule_fill_gradient2("Surface médiane (km²)", low = "blue", high = "red") %>%
rule_fill_gradient2("Nombre de communes moyen en 1800", low = "blue", high = "red") %>%
rule_fill_gradient2("Nombre de communes moyen en 2021", low = "blue", high = "red") %>%
rule_fill_gradient2("Densité communale en 1800 (moyenne)", low = "blue", high = "red") %>%
rule_fill_gradient2("Densité communale en 1800 (médiane)", low = "blue", high = "red") %>%
rule_fill_gradient2("Densité communale en 2011 (moyenne)", low = "blue", high = "red") %>%
rule_fill_gradient2("Densité communale en 2011 (médiane)", low = "blue", high = "red") %>%
rule_fill_gradient2("Densité de population en 1836 (moyenne)", low = "blue", high = "red") %>%
rule_fill_gradient2("Densité de population en 1836 (médiane)", low = "blue", high = "red") %>%
rule_fill_gradient2("Densité de population en 2011 (moyenne)", low = "blue", high = "red") %>%
rule_fill_gradient2("Densité de population en 2011 (médiane)", low = "blue", high = "red") %>%
rule_fill_gradient2("Population en 1836 (moyenne, en milliers)", low = "blue", high = "red") %>%
rule_fill_gradient2("Population en 1836 (médiane, en milliers)", low = "blue", high = "red") %>%
rule_fill_gradient2("Population en 2011 (moyenne, en milliers)", low = "blue", high = "red") %>%
rule_fill_gradient2("Population en 2011 (médiane, en milliers)", low = "blue", high = "red") %>%
rule_fill_gradient2("Nombre d'habitants par commune en 1836", low = "blue", high = "red") %>%
rule_fill_gradient2("Nombre d'habitants par commune en 2011", low = "blue", high = "red") %>%
theme_caption(caption = "Groupes de la typologie vis-à-vis de différentes caractéristiques des départements") %>%
theme_htmlWidget(number_of_entries = nrow(tmp))
print(table)
table_que_moy <- table[, c(1, 2, 3, 5, 6, 7, 9, 11, 13, 15, 17, 19, 20)]
colnames (table_que_moy) <- c("Groupe", "Nombre de départements", "Surface départementale moyenne (km²)", "Nombre moyen de communes par département (1800)", "Nombre moyen de communes par département (2021)", "Densité communale moyenne en 1800 (commune/km²)", "Densité communale moyenne en 2011 (commune/km²)", "Densité de population moyenne en 1836 (hab/km²)", "Densité de population moyenne en 2011 (hab/km²)", "Population départementale moyenne (1836, en milliers)", "Population départementale moyenne (2011, en milliers)", "Nombre d'habitants par commune en 1836", "Nombre d'habitants par commune en 2011")
table_que_moy <- condformat(table_que_moy)%>%
rule_fill_gradient2("Surface départementale moyenne (km²)", low = "blue", high = "red") %>%
rule_fill_gradient2("Nombre moyen de communes par département (1800)", low = "blue", high = "red") %>%
rule_fill_gradient2("Nombre moyen de communes par département (2021)", low = "blue", high = "red") %>%
rule_fill_gradient2("Densité communale moyenne en 1800 (commune/km²)", low = "blue", high = "red") %>%
rule_fill_gradient2("Densité communale moyenne en 2011 (commune/km²)", low = "blue", high = "red") %>%
rule_fill_gradient2("Densité de population moyenne en 1836 (hab/km²)", low = "blue", high = "red") %>%
rule_fill_gradient2("Densité de population moyenne en 2011 (hab/km²)", low = "blue", high = "red") %>%
rule_fill_gradient2("Population départementale moyenne (1836, en milliers)", low = "blue", high = "red") %>%
rule_fill_gradient2("Population départementale moyenne (2011, en milliers)", low = "blue", high = "red") %>%
rule_fill_gradient2("Nombre d'habitants par commune en 1836", low = "blue", high = "red") %>%
rule_fill_gradient2("Nombre d'habitants par commune en 2011", low = "blue", high = "red") %>%
theme_caption(caption = "Groupes de la typologie vis-à-vis de différentes caractéristiques des départements") %>%
theme_htmlWidget(number_of_entries = nrow(tmp))
print(table_que_moy)
pr_etude_typo <- evol_deps[, c(1, 2, 139:149)]
Étude exploratoire menée mi-juillet 2023. Laissée de côté à partir du moment ou boucle faite pour tous les départements.
# On sélectionne uniquement l'Aveyron
cassini_reduite <- subset(cassini, departement_1999 == "12")
evol_nbr_com_reduit <- data.frame() # Création d'un objet pour récupérer les résultats de la base réduite
# Boucle pour exploiter les données date par date
for (label in labels_data_pop) {
annee <- substr(label, start =5, stop = nchar(label)-5) # On repère le n° de l'année en segmentant le label
sous_tableau_reduit <- subset(cassini_reduite, cassini_reduite[, label] == "pop" | cassini_reduite[, label] == "lac.") # On crée un sous-tableau comptant uniquement les communes dont la population nous intéresse, à l'année donnée
# sous_tableau_reduit <- subset(cassini_reduite, cassini_reduite[, label] == "pop") # Juste avec les populations connues
nbr_com_reduit <- nrow(sous_tableau_reduit) # On compte le nombre de communes
i_reduit <- c(annee, nbr_com_reduit) # On compile les résultats totaux
evol_nbr_com_reduit <- rbind(evol_nbr_com_reduit, i_reduit, stringsAsFactors = FALSE)
}
# On traite à la main les deux années 2011 et 2021
# Pour 2011, on fait la liste des CODGEO unique de 2021 et on multiplie par leur nombre de communes fusionnantes (donne le nombre de communes en 2011)
# Pas très propre mais pas l'énergie de faire mieux là...
CODGEO_2021_reduit <- as.data.frame(unique(cassini_reduite$commune_mars_2021))
colnames(CODGEO_2021_reduit) <- "CODGEO_new"
# On joint pour avoir le nombre de communes fusionnantes
CODGEO_2021_reduit <- merge(df_new[c("CODGEO_new", "NbrComFus")], CODGEO_2021_reduit, by = "CODGEO_new", all.y = TRUE)
# Pour les communes non fusionnantes, on indique qu'il y en a une
CODGEO_2021_reduit$NbrComFus[is.na(CODGEO_2021_reduit$NbrComFus)] <- 1
i_2011_reduit <- c(2011, sum(CODGEO_2021_reduit$NbrComFus))
evol_nbr_com_reduit <- rbind(evol_nbr_com_reduit, i_2011_reduit)
# Pour 2021, on liste simplement le nombre de CODGEO uniques de 2021 pour chacun des groupe
i_2021_reduit <- c(2021, length(unique(cassini_reduite$commune_mars_2021)))
evol_nbr_com_reduit <- rbind(evol_nbr_com_reduit, i_2021_reduit)
colnames (evol_nbr_com_reduit) <- c("annees", "nbr_com")
evol_nbr_com <- evol_nbr_com_reduit
# evol_nbr_com[c(1,2), 1] <- c(1795, 1800) # On modifie l'intitulé pour faciliter la représentation graphique
evol_nbr_com$annees[evol_nbr_com$annees == "an3"] <- 1795
evol_nbr_com$annees[evol_nbr_com$annees == "an8"] <- 1800
evol_nbr_com[,1] <- as.numeric(evol_nbr_com[,1]) # On passe en numérique pour faciliter la représentation
evol_nbr_com[,2] <- as.numeric(evol_nbr_com[,2]) # Si on veut faire une seule colonne
ggplot(data=evol_nbr_com, aes(x=annees, y=nbr_com)) +
geom_line() +
scale_x_continuous (breaks = seq(1780, 2030, 20)) +
labs(title="Évolution du nombre de communes en Aveyron", subtitle="1795-2021", x="", y = "", caption="Sources : cassini.ehess.fr, INSEE")
ggplot(data=evol_nbr_com, aes(x=annees, y=nbr_com)) +
geom_line() +
ylim(0, 600) +
scale_x_continuous (breaks = seq(1780, 2030, 20)) +
labs(title="Évolution du nombre de communes en Aveyron", subtitle="1795-2021", x="", y = "", caption="Sources : cassini.ehess.fr, INSEE")
rm(label, annee, nbr_com_reduit, sous_tableau_reduit, i_reduit, i_2021_reduit, CODGEO_2021_reduit, i_2011_reduit)
Affichage ici de cartes réalisées dans le cadre des communes nouvelles.
# install.packages("xlsx")
# library("xlsx")
comFus <- data.frame(read_excel("data-raw/communes_nouvelles/table_passage_geo2003_geo2024.xlsx", sheet = "Liste des fusions", skip = 5))
comSci <- data.frame(read_excel("data-raw/communes_nouvelles/table_passage_geo2003_geo2024.xlsx", sheet = "Liste des scissions", skip = 5))
# Source : https://www.insee.fr/fr/information/2028028
comFus$CODE_DEPT_INI <- substr(comFus$COM_INI, 1, 2)
comFus$CODE_DEPT_FIN <- substr(comFus$COM_FIN, 1, 2)
comFus_carto <- subset(comFus, comFus$CODE_DEPT_INI == "76" | # Seine-Inférieure/Seine-Maritime
comFus$CODE_DEPT_INI == "52" | # Haute-Marne
comFus$CODE_DEPT_INI == "33" | # Gironde
comFus$CODE_DEPT_INI == "79" | # Deux-Sèvres
comFus$CODE_DEPT_INI == "34"| # Hérault
comFus$CODE_DEPT_FIN == "76" |
comFus$CODE_DEPT_FIN == "52" |
comFus$CODE_DEPT_FIN == "33" |
comFus$CODE_DEPT_FIN == "79" |
comFus$CODE_DEPT_FIN == "34")
comSci$CODE_DEPT_INI <- substr(comSci$COM_INI, 1, 2)
comSci$CODE_DEPT_FIN <- substr(comSci$COM_FIN, 1, 2)
comSci_carto <- subset(comSci, comSci$CODE_DEPT_INI == "76" | # Seine-Inférieure/Seine-Maritime
comSci$CODE_DEPT_INI == "52" | # Haute-Marne
comSci$CODE_DEPT_INI == "33" | # Gironde
comSci$CODE_DEPT_INI == "79" | # Deux-Sèvres
comSci$CODE_DEPT_INI == "34" | # Hérault
comSci$CODE_DEPT_FIN == "76" |
comSci$CODE_DEPT_FIN == "52" |
comSci$CODE_DEPT_FIN == "33" |
comSci$CODE_DEPT_FIN == "79" |
comSci$CODE_DEPT_FIN == "34")
write.xlsx(comFus_carto, file = "sorties/Pr_carto_Fusions_2003-2024.xls", sheetName = "Sheet1",
col.names = TRUE, row.names = FALSE, append = FALSE)
write.xlsx(comSci_carto, file = "sorties/Pr_carto_Scissions_2003-2024.xls", sheetName = "Sheet1",
col.names = TRUE, row.names = FALSE, append = FALSE)